c++ - 跳过 GDB 中的 C++ throw 语句

标签 c++ debugging exception gdb throw

当使用 GNU GDB 调试器调试 C++ 程序时,我可以使用 GDB 命令跳过下一行代码:

next

但是,当在下一行抛出异常时,例如

throw SomeException();

然后 GDB 继续运行直到下一个断点,而不是在 catch block 的第一行内停止。

这是 GDB 中的错误,还是我只是使用了错误的命令?

我在 MinGW32 上使用 GDB 7.7 版/ window 。

最佳答案

在 Linux 上这可以正常工作。特别是在抛出异常时使用的低级展开代码中有一个特殊的调试标记(函数或“SDT 探针”,取决于事物的构建方式)。 GDB 在此位置放置一个断点。遇到此断点时,GDB 检查 throw 的目标堆栈帧并且,如果它高于 next ing 框架,在 throw 的目标处放置一个临时断点.

这需要对 GDB 进行一些更改,但也需要对 C++ 运行时进行一些更改,以便将 throw 通知给 GDB。秒。据我所知,还没有人做过将此代码移植到 MinGW 的工作。也许可以通过修改适当的 unwind-mumble.c 来完成。 GCC 源中的文件。

关于c++ - 跳过 GDB 中的 C++ throw 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34595588/

相关文章:

java - 如何远程调用Eclipse中正在调试的小程序的函数?

c# - 客户端 CommunicationException 而服务正常工作

c++ - SonarQube c/c++ 社区插件错误

c++ - 我可以将 2.3 版中的 NetOpt 内容与预先训练的模型一起使用吗?

python - 在Python(pyrasite)中检查线程中的局部变量?

java - 有没有办法处理Java堆空间异常

javascript - Node.js promise 和异步异常

c++ - Zxing - 我在哪里可以找到这些文件? zxing-all-in-one.cpp 和 zxing-all-in-one.h

c++ - 未定义的函数引用 "CashRegister::GetTotalPrice"

Linux:如何调试 SIGSEGV?如何追溯错误来源?