使用GNU gdb调试器调试C ++程序时,我可以使用gdb命令跳过下一行代码
next
但是,当在下一行中引发异常时,例如,
throw SomeException();
然后gdb继续运行直到下一个断点,而不是在catch
块的第一行停止。
这是gdb中的错误,还是我只是使用了错误的命令?我在mingw32 / Windows上使用gdb版本7.7。
答案 0 :(得分:4)
在Linux上,这可以正常工作。特别是在抛出异常时使用的低级展开代码中有一个特殊的调试标记(函数或“SDT探针”,具体取决于构建的方式)。 gdb在这个位置放置一个断点。当遇到此断点时,gdb会检查throw
的目标堆栈帧,如果它位于next
帧之上,则会在throw
的目标位置放置一个临时断点。 / p>
这需要对gdb进行一些更改,但也需要对C ++运行时进行一些更改,以便通知gdb throw
。据我所知,没有人做过将这段代码移植到mingw的工作。也许可以通过修改gcc源中的相应unwind-mumble.c
文件来完成。