我在Linux平台上用C ++编程。
我的程序以此(未处理的)异常终止:
“抛出'long'实例后调用终止” 中止
抛出异常的代码在try-catch块内,那为什么会发生这种情况? 从函数返回时抛出异常。
我习惯于C编程,并且在C ++方面经验很少(这是主要问题)。我不知道如何调试这个问题。我不期望一个解决方案,而是一个方向/指针来调试这个问题。
提前致谢。
答案 0 :(得分:8)
您可以在gdb
下运行您的应用程序(使用-g
使用调试信息构建它)并在使用该命令抛出异常时使其中断:
(gdb) catch throw
这将带您到异常的起源。此问题还提供了更多信息:
请注意,抛出序数类型(例如long
)有点不寻常。它可能在某些临时代码中,因此可以快速找到它。
答案 1 :(得分:5)
调用堆栈中的任何位置都有exception specification或here?如果有,那么你可能会遇到这个问题 - 你可能想要删除所有这些问题。
如果您使用的是gcc,那么您可以在main()
中首先添加此代码:
#ifdef __GNUC__
std::set_terminate(__gnu_cxx::__verbose_terminate_handler);
#endif // ifdef __GNUC__
(http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html更多细节)
这将为您提供更好的回溯。
答案 2 :(得分:1)
你可能正在捕捉错误的异常类型
使用
catch(long)
或
catch(...)
答案 3 :(得分:1)
通常情况下,我建议在抛出类型的构造函数中设置一个断点 - 但在这种情况下......我必须承认从来没有经历过某人已经抛出了很长时间
throw 42;
这在我看来很奇怪。某些调试器可能会在抛出异常时捕获异常。
被叫函数是你的吗?
答案 4 :(得分:1)