我正在尝试分析我的一个应用程序的核心转储,但我无法找到崩溃的原因。
当我运行时,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 存在,对虚拟基函数的调用会崩溃。