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

时间:2011-04-20 04:52:14

标签: linux signals abort

我有一个应用程序,在C ++中运行linux,在退出时获取中止信号。 在我寻找代码来寻找问题之前,我需要知道在什么情况下我将从内核获得中止信号。这可以给我正确的调试方向。

请提及应用程序可能获得中止信号的每种可能情况。

@具体执行方案是,

  • 进程处于退出模式,即调用exit()例程以正常关闭进程。
  • 因此调用所有全局对象析构函数。

TIA

3 个答案:

答案 0 :(得分:3)

  • 使用-g
  • 编译
  • 从调试器
  • 运行它

当应用程序崩溃时,调试器会给你一行,让你检查线程,变量......

其他解决方案:

  • 使用ulimit
  • 更改核心转储生成
  • 在gdb post mortem中加载核心转储

根本原因可能是多个:在你的内存空间之外读取,除以0,取消引用无效指针......

答案 1 :(得分:0)

我会尝试在valgrind下运行。甚至在中止之前可能会出现内存错误,而valgrind可能会注意到并告诉您。如果是这种情况,您会发现错误比使用传统调试器(如gdb)更容易。

答案 2 :(得分:0)

中止的原因通常是断言失败

例如

(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