Gra*_*Guy 19 c++ gdb exception-handling exception
我刚刚开始使用c ++异常并想要正确使用它.我想到的是在捕获异常时生成某种回溯信息.最初我有类似于C++异常的Call-stack的想法,但最终发现它并不是很好.
我还阅读了如何在我的gcc C++应用程序崩溃时生成堆栈跟踪但不想为当前项目添加更多复杂性.因为,我只需要在调试模式下进行回溯,我希望我可以将gdb用于此目的.
我的策略是在catch
块中插入断点,然后通过调用堆栈来准确找出为什么首先抛出异常(或者是什么导致它)?不幸的是,我似乎无法做到这一点,因为当gdb到达断点时,它会清除调用堆栈,我只能看到main(这就是我捕获的地方).这应该发生还是我在这里做错了什么?
编辑: 我只想总结一下其他人的方法:
第一种方法(由paulsm4提供).设置一个捕获点,catch throw
用于捕捉或catch catch
抓住捕获!然后打电话backtrace
第二种方法(由aschepler设置)__cxa_throw
然后设置断点backtrace
第三种方法(在Qt Creator中 - 如果你碰巧使用的话)你可以在throw或catch上轻松设置断点!
Edit_2:使用Qt Creator调试器,似乎设置断点__cxa_begin_catch
也相当于catch catch
:)
pau*_*sm4 17
这个:
http://sourceware.org/gdb/onlinedocs/gdb/Set-Catchpoints.html
您可以使用catchpoints使调试器停止某些类型的程序事件,例如C++异常或加载共享库.使用catch命令设置捕获点.
所以答案应该是"是",它应该避免你引用的两个链接的问题.
如果有帮助请回复!就个人而言,我自己从未尝试过这个GDB功能:)
评论中的答案摘要:
第一种方法(通过 paulsm4)。设置一个catch throw
接球点,用于接球或catch catch
接球!然后打电话backtrace
第二种方法(由 aschepler)设置一个断点__cxa_throw
,然后backtrace
第 3 种方法(在 Qt Creator 中——如果您碰巧使用)您可以轻松地在 throw 或 catch 上设置断点!
使用Qt Creator调试器,好像设置断点__cxa_begin_catch
也相当于catch catch
归档时间: |
|
查看次数: |
9252 次 |
最近记录: |