当使用 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/