我刚刚开始使用 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
:)