跳过 GDB 中的 C++ throw 语句

Step over a C++ throw statement in GDB

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

next

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

throw SomeException();

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

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

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

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

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