中止信号的一般原因是什么?

| 我有一个应用程序,在运行Linux的C ++中,退出时会发出中止信号。 在寻求解决该问题的代码之前,我需要知道在什么情况下会从内核获得中止信号。这可以给我正确的调试方向。 请提及应用程序可能会中止信号的每种潜在情况。 @执行场景的细节是, 进程处于退出模式,即调用exit()例程以正常关闭进程。 因此,所有全局对象析构函数都被调用。 TIA
已邀请:
用-g编译 从调试器运行 当应用程序崩溃时,调试器将为您提供代码,让您检查线程,变量... 其他解决方案: 使用ulimit更改您的核心转储生成 在gdb post mortem中加载核心转储 根本原因可能多种多样:在您的内存空间之外读取,除以0,取消引用无效的指针...
我会尝试在valgrind下运行。甚至在中止和valgrind注意到并告诉您之前,可能会出现内存错误。在这种情况下,您将发现错误比使用常规调试器(如gdb)容易得多。
中止的原因通常是断言失败 例如
(gdb) bt
#0  0x00000035fbc30265 in raise () from /lib64/libc.so.6
#1  0x00000035fbc31d10 in abort () from /lib64/libc.so.6
#2  0x00000035fbc296e6 in __assert_fail () from /lib64/libc.so.6

要回复问题请先登录注册