是否可以在 Visual Studio 中的未处理异常之后继续调试?

Is it possible to continue debugging past an unhandled exception in Visual Studio?

各种其他问题暗示可以在“未处理的异常”弹出窗口之后继续调试,如下所示:

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

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

是的 - 这是可能的。如果您反复遇到该弹出窗口,并且异常设置使得异常不会被调试器拦截(因此传递给应用程序自己的异常处理),那么可能是您的“未处理”异常处理已经 运行,或者以您认为存在的形式不存在。 Double-check 您设置断点的位置并确保它们是可以命中的。

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

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

... 那么调试器可以对你隐藏 RecordUnhandledException()。也就是说,如果您在(故意)抛出异常的行上设置断点,并尝试进入它,调试器可能会通过在单个步骤中执行处理代码来直接回到该点,使其不可见你。但是,如果它产生其他输出,您应该能够看到该输出。如果不存在,它可能会在 RecordUnhandledException() 中使用显式断点来揭示它的存在并单步执行其逻辑。