c++ - 是否可以继续调试 Visual Studio 中未处理的异常?
问题描述
各种其他问题暗示可以继续调试通过“异常未处理”弹出窗口,如下所示:
这是 Visual Studio 2019 的弹出窗口,但 VS 2015 给出了类似的行为。在这两种情况下,对于我尝试过的所有 Win32/x64 和 Debug/Release 组合,调试器都拒绝越过引发未处理异常的点——每次尝试继续时都会再次弹出相同的弹出窗口。我想超越这一点并继续进入我通过设置的代码SetUnhandledExceptionFilter()
。那可能吗?
这个强烈支持的答案表明它可能是通过工具 - > 选项下的选项然后调试 - >关于展开堆栈的常规...但是对答案的评论表明该选项可能已从 VS2017 中消失。我在 VS 2015 中找到了该选项,但它没有达到预期的效果。因此,尽管投票数较少,该问题的公认答案是否正确 - 设计上不可能继续调试未处理的异常?
解决方案
是的 - 这是可能的。如果您反复出现该弹出窗口,并且异常设置使得异常不会被调试器拦截(因此传递给应用程序自己的异常处理),那么可能是您的“未处理”异常处理已经运行,或不以您认为的形式存在。仔细检查你在哪里设置了断点,并确保它们是可以被击中的。
另请注意,如果您有类似的东西来捕获 SEH 异常(例如整数除以零):
__try
{
// set up and run the application
}
__except( RecordUnhandledException( GetExceptionInfo() ) )
{
}
...然后调试器可以对您隐藏RecordUnhandledException()
。也就是说,如果您在(故意)抛出异常的行上设置断点,并尝试单步执行,调试器可能会通过在单个步骤中执行处理代码来直接退回到该点,从而使其不可见你。但是,如果它产生其他输出,您应该能够看到该输出。如果不是,它可能需要一个明确的断点RecordUnhandledException()
来显示它的存在并逐步执行它的逻辑。
推荐阅读
- c++ - 被释放后修改 - 在结构中返回一个 C 数组 `c_str` (const char*)
- pandas - 当我不希望它时,PANDAS 将变量转换为年频率
- swift - Xcode 12.2 中 XCFramework 类型库的集成错误
- mysql - 启动“XAMPP”堆栈时出错:无法计算 MAC 地址:dyld:惰性符号绑定失败:未找到符号:_clock_gettime
- javascript - 如何将链接添加到“标题”或“图像”
- php - 如何增加或减少数量然后数据库数量也会改变?
- r - 通过多个条件获取多列的滚动平均值,使用 dplyr 和应用系列
- python - 使用自定义形状在 python 中绘制二维点阵
- highcharts - Highcharts 向下钻取设置 x 轴 setExtremes
- openssl - 在 OpenSSL 配置文件中使用自定义 ASN1 对象将 OCTETSTRING 指定为十六进制