是否可以通过Visual Studio中未处理的异常继续调试?

问题描述

各种各样的其他问题表明,可以像这样通过“未处理的异常”弹出窗口继续调试:

Exception Unhandled popup

这是Visual Studio 2019的弹出窗口,但是VS 2015给出了类似的行为。在这两种情况下,对于我尝试过的所有Win32 / x64和Debug / Release组合,调试器都拒绝超过抛出未处理异常的地步-每次尝试继续操作时,都会再次弹出相同的弹出窗口。我想超越这一点,继续进入通过SetUnhandledExceptionFilter()设置的代码。有可能吗?

This strongly upvoted answer建议,可以通过 Tools-> Options 下的一个选项,然后是 Debugging-> General 来展开堆栈...,但是对答案的评论表明该选项可能已从VS2017中消失。我在VS 2015中找到了该选项,但是没有达到预期的效果。因此,尽管票数减少了,但该问题的公认答案是否正确-设计无法继续调试过去未处理的异常?

解决方法

是-有可能。如果您反复出现该弹出窗口,并且异常设置使得调试器未拦截到该异常(并因此将其传递给应用程序自己的异常处理),则可能是您的“未处理”异常处理已经运行,或以您认为的形式不存在。仔细检查您在哪里设置了断点,并确保这些断点很容易被击中。

还请注意,如果您有类似这样的东西来捕获SEH异常(例如整数除以零):

__try
{
    // set up and run the application
}
__except( RecordUnhandledException( GetExceptionInfo() ) )
{
}

...然后调试器可以向您隐藏RecordUnhandledException()。也就是说,如果您在(故意)引发异常的行上设置了一个断点,并尝试进入该断点,则调试器可以通过一步执行处理代码以使其不可见,从而直接退回到该点。您。但是,如果产生其他输出,则应该能够看到该输出。如果没有,则可能需要在RecordUnhandledException()中使用一个明确的断点来揭示它的存在并逐步了解其逻辑。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...