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

时间:2009-05-06 23:03:34

标签: visual-studio-2008 exception debugging

简言之:

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

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

精化:

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

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

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

  • 我知道我不必全面了解“所有clr例外”,但是可能的例外列表大约2英里长,滚动浏览并选择你想要的那些(然后是什么)如果我错过了一些)。

6 个答案:

答案 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. Customizing exception handling in the VS Debugger
  2. Debugger3.ExceptionGroups
  3. devenv /command
  4. How to: Get References to the DTE and DTE2 Objects

答案 1 :(得分:8)

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

答案 2 :(得分:1)

关闭我的头脑(因此可能是无意义的)你可以将调试器设置为仅在未处理的CLR除外,然后在初始化代码期间为所有异常创建一个处理程序委托/事件并吞下CLR(OK) ,好吧,仅在调试模式下),然后在代码中您希望VS开始打破CLR异常的位置删除委托/事件。

答案 3 :(得分:1)

您可以通过创建宏(如Michael Lehenbauer的示例中所示)来执行此操作,然后重新配置断点以运行宏并继续执行。您可以在您关心的代码部分的末尾再次执行相同的操作,或者在调试会话之间手动禁用它。

答案 4 :(得分:0)

当然,您可以使用Visual Studio add-inmacro

来完成此操作

答案 5 :(得分:0)

还有

if(Debugger.IsAttached){Debugger.Break()}