6

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

请提及应用程序可能获得中止信号的每一个潜在场景。

@执行场景的细节是,

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

TIA

4

3 回答 3

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

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

其他解决方案:

  • 使用ulimit更改核心转储生成
  • 在 gdb 事后加载核心转储

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

于 2011-04-20T05:06:20.810 回答
1

我会尝试在valgrind下运行。甚至在 abort 和 valgrind 注意到并告诉你之前就可能存在内存错误。如果是这种情况,您会发现错误比使用 gdb 之类的传统调试器容易得多。

于 2011-04-20T07:54:47.380 回答
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
于 2013-11-06T13:01:00.053 回答