gdb catchpoint仅用于未捕获的C ++异常?

时间:2011-04-19 15:35:40

标签: c++ exception gdb breakpoints

通过使用gdb命令设置catchpoint,我可以告诉gdb调试器在引发任何C ++异常后立即停止

catch throw

但是,有没有办法只停留未捕获的 C ++异常(比如C#或Java)?这样可以在某些情况下更容易找到错误。

谢谢!

1 个答案:

答案 0 :(得分:12)

如果未捕获异常,则会自动调用特殊库函数 terminate() 。 Terminate实际上是一个指向函数的指针,默认值是标准C库函数abort()。您可以能够在调用abort()函数时设置断点,并从那里识别未捕获的异常的位置。

break abort
...
run
...
bt

您可以使用 terminate() 安装自己的 std::set_terminate() 功能。您应该能够在gdb中的终止函数上设置断点。您可能能够从 terminate() 函数生成堆栈回溯,此回溯可能有助于识别异常的位置。其他详细信息仅提供here