1

アプリケーションの 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 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 が存在する場合、仮想ベース関数の呼び出しがクラッシュする理由がわかりません。

4

1 に答える 1