如何调试以未处理的异常终止的程序?

puf*_*der 3 c++ linux exception

我在Linux平台上用C++编程.

我的程序终止于此(未处理的)异常:

"在抛出'long'实例后终止调用"已中止

抛出异常的代码在try-catch块中,那为什么会发生这种情况?从函数返回时抛出异常.

我习惯于C编程,并且在C++方面经验很少(这是主要问题).我不知道如何调试这个问题.我不指望解决方案,而是指向调试此问题的方向/指针.

提前致谢.

gav*_*inb 9

您可以运行您的应用程序gdb(使用调试信息构建它-g)并在使用该命令抛出异常时使其中断:

(gdb) catch throw
Run Code Online (Sandbox Code Playgroud)

这将带您到异常的起源.此问题还提供了更多信息:

请注意,抛出序数类型(例如a long)有点不寻常.它可能在某些临时代码中,因此可以快速找到它.


Dou*_*der 5

它在调用堆栈的任何地方都有异常规范在这里?如果有,那么你可能会遇到这个问题 - 你可能想要删除所有这些问题.

如果您使用的是gcc,那么您可以先添加以下代码main():

#ifdef __GNUC__
    std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
#endif // ifdef __GNUC__
Run Code Online (Sandbox Code Playgroud)

(更多详细信息,请访问http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html)
这将为您提供更好的回溯.