2011-04-12 121 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. 您可以为特定异常(选择异常,右键单击并选择/取消选择在用户代码中未处理时继续)或整个异常类别(例如,所有公共语言运行时异常)。
相关问题