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

emk*_*y08 12 c++ gdb breakpoints exception

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

catch throw
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

jsc*_*ier 12

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

break abort
...
run
...
bt
Run Code Online (Sandbox Code Playgroud)

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