如何在捕获块中设置断点?(C++)
How to set breakpoint in catch block? (c++)
当我尝试调试应用程序时发生了一些奇怪的事情。只是当我在 try-catch 块的 catch 部分设置断点时,调试器不会在断点处停止。
下面是一个示例。
try {
throw std::overflow_error("test");
} catch (...) {
qDebug() << "caught"; // HERE, I SET BREAKPOINT ON THIS LINE
}
当发生异常时,它会在屏幕上打印"捕获",但它不会在此行停止。(如果你想知道;是的,我正在调试模式下构建应用程序并在调试模式下运行)
我是否缺乏关于 gdb 如何工作的基础知识?(我的意思是它可能不会停止,因为捕获部分中的断点不起作用)
任何帮助将不胜感激。
谢谢。
要在 IDE 中捕获异常,您需要直接在 gdb 控制台中发出 gdb 命令。以下是如何在Qt Create IDE中进入gdb控制台的链接:在Qt-Creator中访问gdb控制台
一旦你是类型
catch throw
在程序引发异常时停止或
catch catch
以在捕获块中停止。
如果需要捕获特定的库异常,请阅读以下线程: GDB:抛出特定异常类型时如何中断?
对于使用LLDB的人,
# set on both throw and catch
breakpoint set -E C++ -h true
# or on catch
b __cxa_begin_catch
# or on throw
b __cxa_throw
同时将在投掷和接球时设置断点。
@ben森,我想任何意见都可能导致这种行为。有很多方法可以指定这些选项(通过环境变量(又名 CFLAGS 或通过项目的 IDE 选项),但它们都会导致编译器命令行提供一些特定的 -O 选项。即使什么都没有给出,请检查编译器的默认优化是什么。我的建议是明确地将 -O0 提供给编译者,并检查是否没有提供其他 -O 选项。
相关文章:
- 无法删除指针,已触发断点
- 条件断点在不应该触发时触发
- GDB 断点在 Mac 上是不准确的
- 在 vscode 中运行时无法暂停或设置断点
- 不会命中此断点
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 如何在进入动态打开的共享库时设置断点?
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 代码在 msvcrt .dll函数上设置断点失败
- 如何在引用上设置数据断点
- 无法在visual studio 2017(本机c++)中禁用数据断点
- 为什么在c++中使用Delete[]会出现跟踪/断点错误
- for循环的条件只有在遇到断点后才生效
- 项目名称.exe 已触发断点
- 视觉对象触发了断点 c++
- 实现在多线程代码中安全恢复的断点
- 如何在 gdb 中的所有构造函数上同时为 C++ 对象设置断点?
- C/C++ 经过的流程周期,不包括断点处
- 在 Visual Studio 2012 中未命中断点
- 无法在 XmlHttpRequest 模块上获取断点(Javascript 引擎/XHR 请求)