1

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

当我运行时,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 full,否则maint info sol-threads我找不到任何导致错误的东西。我只看到每个线程的堆栈跟踪,没有任何关于该错误的信息。

最后我找到了一个导致终止信号的线程。

#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 存在,对虚拟基函数的调用会崩溃。

4

1 回答 1

1

SIGKILL可能是由于您的应用程序超出了某些资源限制造成的。尝试获取系统日志并查看是否有任何超出资源限制的消息。

参考

于 2015-05-08T11:56:33.447 回答