我可以通过编程方式调整视觉工作室"在抛出异常时断开"选项吗?

Ori*_*rds 20 debugging exception visual-studio-2008

简述:

在Visual Studio 2008中,Debug菜单有一个Exceptions...选项.
单击此按钮时,将显示"抛出异常时中断"对话框,其中勾选"公共语言运行时异常"旁边的框.

我希望能够以编程方式勾选/取消选中此框.

阐述:

这会导致调试器在抛出任何CLR异常时中断(而不是当它被捕获并重新抛出时),因此这对于故障排除很有用.

问题是,它捕获了所有CLR异常,并且.NET框架恰好在内部抛出并捕获一堆异常,这些异常也会被捕获.这导致调试器打破了一堆我真正不关心的异常,因为它们是框架的内部而不是问题.
WCF 在这方面特别糟糕,幸运的是,我的应用程序在整个地方使用WCF.

我想做的是,关闭复选框,一旦我的应用程序启动(并通过WCF连接阶段和所有内部异常),然后打开它,打破现在的所有异常.

  • 我知道我没有必要抓住"所有clr例外",但是可能的例外列表大约2英里长,滚动浏览并选择你想要的那些(然后如果我错过了怎么办)一些).

Mic*_*uer 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")
Run Code Online (Sandbox Code Playgroud)

因此,您可以轻松编写宏来打开/关闭特定异常.要从应用程序调用宏,可以启动"devenv/command".

或者,您可以从out-of proc中使用DTE并直接自动化Visual Studio(不涉及宏).

更多信息:

  1. 在VS Debugger中自定义异常处理
  2. Debugger3.ExceptionGroups
  3. devenv /命令
  4. 如何:获取对DTE和DTE2对象的引用


IV.*_*IV. 8

这并没有直接解决你的问题,但有一个方便的和弦ctrl-D + E,它会调出调试异常对话框.Ctrl + Alt + E将执行相同的操作.