在 GDB 中跳过 C++ throw 语句

emk*_*y08 2 c++ debugging gdb exception throw

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

next
Run Code Online (Sandbox Code Playgroud)

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

throw SomeException();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Tom*_*mey 5

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

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