VS2008插件:临时禁用/删除所有catch块

6

有没有任何附加组件可以临时禁用所有catch块? 我正在维护一个应用程序,我需要找出它在哪里抛出异常。 某人已经在所有层中完成了错误处理,使我的工作变得更加困难 :(

4个回答

21

我不知道如何禁用catch块,但你想要实现的目标可以通过VS选项中的异常对话框轻松完成:

Debug -> Exceptions -> CLR Exceptions -> Check the "Thrown" checkbox.

这种方法可以让VS在执行任何catch块之前立即中断抛出异常。


2
请注意,在找到问题异常之前,可能会有大量误报,除非您知道该异常的确切类型。 - Richard
1
我已经寻找了很久!原来VS2005默认情况下在调试菜单中没有“异常”选项,但是你可以通过自定义工具栏来添加它。 - Pondidum
1
安迪:我确定它在菜单中的某个地方。即使是VS2002也有它。很久没见过了... - Mehrdad Afshari
Mehrdad:我在很多菜单选项上都有这种感觉。我猜这是因为我在家用的是VS2008,而在工作中使用的是VS2005... - Pondidum
@Andy:VS2k5确实有异常菜单(C++项目)Debug -> Exceptions或Ctrl+D,E(来自C#键盘映射)。 - Simeon Pilgrim

1

你不需要禁用所有 catch 块来确定异常最初是从哪里引发的 - 在调试器中。如果在 VS 中打开异常对话框,您可以配置调试器在异常未处理时(默认)或在首次抛出异常时捕获异常。这是最简单和最不会干扰的方法。

异常对话框可从“调试”菜单中访问。


1

您应该使用“调试”>“异常”菜单来打开异常对话框,并在任何您想要在调试期间使开发环境中断的异常类型上选择复选框“抛出”。

您会发现,当特定异常(或其任何子类)被抛出时,VS会在异常处理之前中断。

这将解决您的问题。


0

我发现更有趣的是堆栈窗口。

当在调试模式下运行项目时,进入

Debug => Window => Call stack (Ctrl+d, C)

现在你可以看到采取了哪些步骤来到这里,你可以双击它们以跳转到代码行。我觉得这非常方便。


是的,但在遇到中断之前,您没有调用堆栈。 - Dave Van den Eynde
不知道所有的异常情况(应该去检查一下),但我知道它适用于堆栈溢出(异常)... - Boris Callens
当然,由于异常会将您打入调试器并提供一个调用堆栈,因此出现异常时您需要断点调试。问题在于如何在首次出现异常时中断执行。 - Dave Van den Eynde
如果我没有弄错,OP 中的问题是抛出了异常,但不是在原始位置。所以我的建议是按照堆栈跟踪向下查找异常的来源。 - Boris Callens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接