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