2011-04-12 119 views
5

我測試異常攔截,因此,我不需要Visual Studio在thrown new NullReferenceException("myVar")這樣的thinkgs上中斷。防止Visual Studio在拋出異常時中斷

我在調試=>例外

enter image description here

然而,VS的異常打破了下面。我該怎麼辦?

PS。

爲應用程序未處理的異常,我「趕」他們使用Application.UnhandledException如下列:

''' <summary>Occurs when the application encounters an unhandled exception.</summary> ' 
Private Sub Application_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException 
    Dim message As String = String.Format("An application UnhandledException were thrown.{1}The application will now terminate.{1}'{0}'{1}{1}StackTrace:{1}{2}", e.Exception.Message, Environment.NewLine, e.Exception.StackTrace) 
    MessageBox.Show(message) 
End Sub 
+0

嘗試捕捉它,如果可能? – lxcid 2011-04-12 15:45:04

+0

這隻顯示VS在拋出時不會中斷所有異常。您需要鑽取CLR異常節點以查看是否檢查了單個異常。 – CodeNaked 2011-04-12 15:46:39

+0

@CodeNaked:我驗證:System.NullReferenceException未被選中。 – serhio 2011-04-13 08:08:06

回答

2

如果拋出未在你的代碼的任何地方處理的異常時,Visual Studio是怎麼回事打破。它沒有任何其他選擇:有一個未處理的異常。在Visual Studio之外,應用程序會顯示一條錯誤消息並通知用戶發生了未處理的異常。

您在調試看到的選項 - >例外對話框只允許您配置是否Visual Studio的突破上所有例外,包括那些在後面的代碼進行處理。這些通常被稱爲「第一次機會」例外。

除此之外,你不應該自己拋出NullReferenceException;這是爲運行時框架保留的運行時異常。相反,你應該拋出一個ArgumentNullException

+0

看我的** PS **。至於你的評論,也許你有理由,無論如何,MSDN只是通知'注意,應用程序拋出ArgumentNullException異常,而不是NullReferenceException異常...' – serhio 2011-04-13 08:04:51

4

我開始使用VS2010時遇到同樣的問題。我有單元測試,期望異常,我從我的函數中拋出異常。這些例外應該由我的圖書館的用戶來處理。在「調試 - >異常」對話框中,取消選中「公用語言運行時例外」的「用戶未處理」列下的複選框,並停止對這些例外的處理。順便說一句,我沒有看到你在這裏附上的對話框中的第二列。

+0

僅供參考,調試選項「啓用只是我的代碼(只管理)」必須是檢查以查看「例外」窗口中的「用戶未處理」列。 – 2013-03-05 15:59:05

0

以下方法在Visual Studio 2015中適用於我(類似的過程可能適用於VS2010)。

從Visual Studio documentation on managing exceptions with the debugger摘自:

  1. 在例外設置窗口,在窗口中單擊鼠標右鍵,然後選擇顯示欄打開上下文菜單。 (如果您關閉了「只是我的代碼」,您將看不到此命令。)
  2. 您應該看到名爲其他操作的第二列。當特定異常用戶代碼未處理時,此列顯示「繼續」,表示如果該異常未在用戶代碼中處理但在外部代碼中處理,則調試器不會中斷。
  3. 您可以爲特定異常(選擇異常,右鍵單擊並選擇/取消選擇在用戶代碼中未處理時繼續)或整個異常類別(例如,所有公共語言運行時異常)。
相關問題