如何查看核心转储中的崩溃原因?

时间:2015-05-08 11:38:52

标签: multithreading gdb coredump sigkill

我正在尝试分析我的某个应用程序的核心转储,但我无法找到崩溃的原因。

当我运行gdb binary file corefile时,我看到以下输出:

Program terminated with signal SIGKILL, Killed.
#0  0xfedcdf74 in _so_accept () from /usr/lib/libc.so.1
(gdb)

但我很确定没有人执行kill -9 <pid>。使用info thread,我可以看到应用程序启动的所有线程,但我看不出任何关于任何线程的特殊内容。

通过运行bt fullmaint info sol-threads我找不到任何导致错误的内容。我只看到每个线程的堆栈跟踪,没有任何关于错误的信息。

最后我发现了一个导致kill信号的线程。

#0  0xfedcebd4 in _lwp_kill () from /usr/lib/libc.so.1
#1  0xfed67bb8 in raise () from /usr/lib/libc.so.1
#2  0xfed429f8 in abort () from /usr/lib/libc.so.1
#3  0xff0684a8 in __cxxabiv1::__terminate(void (*)()) () from /usr/local/lib/libstdc++.so.5
#4  0xff0684f4 in std::terminate() () from /usr/local/lib/libstdc++.so.5
#5  0xff068dd8 in __cxa_pure_virtual () from /usr/local/lib/libstdc++.so.5
#6  0x00017f40 in A::method (this=0x2538d8) at A.cc:351

A类继承了一个抽象类,在第351行中,调用了在抽象类中声明并在A中定义的虚函数。我不明白为什么如果对象A存在,对虚拟基本函数的调用崩溃。

1 个答案:

答案 0 :(得分:0)

SIGKILL可能是您的应用超过某些resource limit造成的。尝试获取系统日志,看看是否有超出资源限制的消息。

参考