2011-02-19 63 views
6

我有一個用於輸入測試用例的簡單WinForms應用程序。自從我將此應用程序升級到.NET 4.0並將新的標籤頁添加到標籤頁控件以驗證XML與XSD模式之後,應用程序隨機崩潰。我一直無法重現這個例外。Winforms應用程序中未處理的異常

我的QA人收到此錯誤是一般的Windows消息:

TestCaseViewer遇到問題,需要關閉。對此造成的不便,我們表示歉意。

要試圖去我已經添加以下代碼程序的主要方法開始真正的錯誤:

 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
     Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
     Application.ThreadException += Application_ThreadException; 

事件處理程序是這樣的:

static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) 
    { 
     try 
     { 
      MessageBox.Show(e.Exception.ToString(), @"Thread Exception", 
       MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
     finally 
     { 
      Application.Exit();  
     } 
    } 

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
    { 
     try 
     { 
      var ex = (Exception)e.ExceptionObject; 
      MessageBox.Show(ex.ToString(), @"Unhandled Exception", 
       MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
     finally 
     { 
      Application.Exit();  
     } 
    } 

不幸的是,這並沒有起到什麼作用,無論如何,錯誤仍然以這種方式產生未處理的錯誤,而這種錯誤正在冒泡給操作系統。

任何人都可以給我任何其他想法捕獲此異常?

+0

堆棧跟蹤? ** MessageBox.Show(e.Stacktrace); ** – 2011-02-19 05:47:34

+0

只要堆棧跟蹤不爲空,它將在異常時調用ToString()時返回。 – Loathian 2011-02-22 20:04:05

回答

2

如果你正在使用Visual Studio,您可以將其設置爲打破所有未處理的異常,甚至,一個例外是拋出,無論它是否是由你的代碼來處理的任何時間。

要做到這一點,請從「Debug」菜單中選擇「Exceptions」。你會得到一個對話框,如下所示:

    Visual Studio Exceptions dialog

如果你真的想要得到嚴重,請檢查所有的箱子。然後,從您的QA人員中找出觸發異常的具體步驟,並在開發環境中的調試器下運行時精確重現這些操作。無論何時拋出異常,Visual Studio都會中斷,並且您會看到有問題的代碼行以及完整的堆棧跟蹤。

+0

我確實在IDE中檢查了該設置。問題是,我無法重現錯誤,因爲他只是在數據網格中點擊相同的步驟。錯誤不會以同樣的方式連續兩次顯示。我有一種感覺,在數據綁定連接或網格中的代碼處理位置更改中,這是不好的。 – Loathian 2011-02-21 01:43:10

9

嘗試添加以下到您的app.config

<runtime> 
    <!-- the following setting prevents the host from closing when an unhandled exception is thrown --> 
    <legacyUnhandledExceptionPolicy enabled="1" /> 
</runtime> 
相關問題