简言之:
在Visual Studio 2008中,Debug
菜单有Exceptions...
选项
单击此按钮时,将显示“抛出异常时中断”对话框,其中勾选“公共语言运行时异常”旁边的框。
我希望能够以编程方式勾选/取消选中此框。
精化:
这会导致调试器在抛出任何CLR异常时中断(而不是在捕获并重新抛出时),因此这对于故障排除非常有用。
问题是,它捕获了所有CLR异常,并且.NET框架恰好在内部抛出并捕获一堆异常,这些异常也会被捕获。这导致调试器打破了一堆我真正不关心的异常,因为它们是框架的内部而不是问题。
WCF在这方面特别不好,而且幸运的是,我的应用程序在整个地方都使用了WCF。
我想做的是关闭复选框,一旦我的应用启动(并通过WCF连接阶段和所有内部异常),然后打开它,打破所有例外从现在开始。
答案 0 :(得分:30)
您可以通过Visual Studio的自动化API(称为DTE)打开/关闭它们。看一下Debugger3.ExceptionGroups API。例如:
' Turn off NullArgumentException.
Dim debugger As Debugger3 = DTE.Debugger
Dim exceptionGroup As ExceptionSettings = dbg.ExceptionGroups.Item("Common Language Runtime Exceptions")
exceptionGroup.SetBreakWhenThrown(False, "System.NullArgumentException")
因此,您可以轻松编写宏来打开/关闭特定异常。要从应用程序调用宏,可以启动“devenv / command”。
或者,您可以从out-of proc中使用DTE并直接自动化Visual Studio(不涉及宏)。
更多信息:
答案 1 :(得分:8)
这并没有直接解决你的问题,但有一个方便的和弦ctrl-D + E,它会调出调试异常对话框。 Ctrl + Alt + E将执行相同的操作。
答案 2 :(得分:1)
关闭我的头脑(因此可能是无意义的)你可以将调试器设置为仅在未处理的CLR除外,然后在初始化代码期间为所有异常创建一个处理程序委托/事件并吞下CLR(OK) ,好吧,仅在调试模式下),然后在代码中您希望VS开始打破CLR异常的位置删除委托/事件。
答案 3 :(得分:1)
您可以通过创建宏(如Michael Lehenbauer的示例中所示)来执行此操作,然后重新配置断点以运行宏并继续执行。您可以在您关心的代码部分的末尾再次执行相同的操作,或者在调试会话之间手动禁用它。
答案 4 :(得分:0)
当然,您可以使用Visual Studio add-in或macro。
来完成此操作答案 5 :(得分:0)
还有
if(Debugger.IsAttached){Debugger.Break()}