我正在尝试分析我的某个应用程序的核心转储,但我无法找到崩溃的原因。
当我运行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
我找不到任何导致错误的内容。我只看到每个线程的堆栈跟踪,没有任何关于错误的信息。
最后我发现了一个导致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存在,对虚拟基本函数的调用崩溃。