首页 > 解决方案 > 是否可以继续调试 Visual Studio 中未处理的异常?

问题描述

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

异常未处理弹出窗口

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

这个强烈支持的答案表明它可能是通过工具 - > 选项下的选项然后调试 - >关于展开堆栈的常规...但是对答案的评论表明该选项可能已从 VS2017 中消失。我在 VS 2015 中找到了该选项,但它没有达到预期的效果。因此,尽管投票数较少,该问题的公认答案是否正确 - 设计上不可能继续调试未处理的异常?

标签: c++visual-studiodebuggingexceptionunhandled-exception

解决方案


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

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

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

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


推荐阅读