首页 文章

gdb:在C中跳过throw语句

提问于
浏览
1

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

next

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

throw SomeException();

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

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

1 回答

  • 4

    在Linux上,这可以正常工作 . 特别是在抛出异常时使用的低级展开代码中有一个特殊的调试标记(函数或"SDT probe",具体取决于构建方式) . gdb在这个位置放置一个断点 . 当命中此断点时,gdb检查 throw 的目标堆栈帧,如果它位于 next 框架上方,则将临时断点放在 throw 的目标上 .

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

相关问题