gdb:在C ++中跳过throw语句

时间:2016-01-04 16:33:57

标签: c++ debugging exception gdb throw

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

next

但是,当在下一行中引发异常时,例如,

throw SomeException();

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

这是gdb中的错误,还是我只是使用了错误的命令?我在mingw32 / Windows上使用gdb版本7.7。

1 个答案:

答案 0 :(得分:4)

在Linux上,这可以正常工作。特别是在抛出异常时使用的低级展开代码中有一个特殊的调试标记(函数或“SDT探针”,具体取决于构建的方式)。 gdb在这个位置放置一个断点。当遇到此断点时,gdb会检查throw的目标堆栈帧,如果它位于next帧之上,则会在throw的目标位置放置一个临时断点。 / p>

这需要对gdb进行一些更改,但也需要对C ++运行时进行一些更改,以便通知gdb throw。据我所知,没有人做过将这段代码移植到mingw的工作。也许可以通过修改gcc源中的相应unwind-mumble.c文件来完成。