アプリケーションの 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
バグに関する情報がなくても、各スレッドのスタック トレースが表示されるだけです。
最後に、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 が存在する場合、仮想ベース関数の呼び出しがクラッシュする理由がわかりません。