2014-01-28 48 views
2

我試圖記錄一個異常,當我的應用程序崩潰。儘管每隔一段時間我的應用程序崩潰都會捕獲大多數異常。我真的不知道如何將異常記錄到文本文件。無論我嘗試什麼都不起作用。林不知道我做錯了什麼,如果有人能指出我正確的方向,將不勝感激。記錄致命異常

這就是我的代碼目前的樣子。而我正在使用多線程環境。

 public MainWindow() 
     { 
      AppDomain currentDomain = AppDomain.CurrentDomain; 
      currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler); 
      InitializeComponent();   
     } 

     static void MyHandler(object sender, UnhandledExceptionEventArgs args) 
     { 
      Exception e = (Exception)args.ExceptionObject; 
      using (StreamWriter writer = File.AppendText("ExceptionsLog.txt")) 
      { 
       DateTime time = DateTime.Now; 
       writer.WriteLine("Time {0} Exception: {1} Runtime termination: {2}", time, e.Message, args.IsTerminating); 
      } 
     } 
+0

這對我來說很合適。什麼不行?該方法是否被調用?還是不行? (注意:我建議將整個異常寫入日誌文件,而不僅僅是消息,所以將「e.Message」改爲「e」) –

+0

不知何故文本文件是空的。我只是得到通常的MessageBox應用程序已停止工作,但沒有日誌:/ – Timo1995

+0

如果你在MyHandler中放置一個斷點,它甚至到達那裏嗎?你能通過它看看會發生什麼嗎? –

回答

3

首先,確保沖洗你的StreamWriter

其次,可能還有其他例外,AppDomain.CurrentDomain.UnhandledException未報告。

  • 如果您正在使用任務,則可能會導致TaskScheduler.UnobservedTaskException事件觸發。

  • 如果您使用WPF,您可能還想要處理Application.Current.DispatcherUnhandledException事件,該事件可以防止進程崩潰。

  • 如果您使用多個應用程序域,它們中的異常不會由當前域處理。