C++ コードに非常に奇妙なバグがあります。
全体を理解するために話をしなければなりません。boost_thread ライブラリ経由でスレッドを使用しています。メイン メソッドはいくつかの初期化を行い、3 ~ 4 スレッドを開始してから、永久に待機します。
while(true) sleep(1);
すべてのスレッドのメイン関数には、いくつかの catch と catch all ハンドラーを使用した try があります。
void do_work() {
try {
..
}
catch (int ei) {
}
catch (...) {
log("General error");
}
}
スレッドは次のようなさまざまなタスクを実行します
- execv 関数でスクリプトを実行し、
- sqlite ライブラリを使用してデータベースに書き込み、
- openssl ライブラリを介して世界と通信します。
通常ではありませんが、非常に頻繁に、プログラムが終了してしまうことがあります。
すべてが適切に解放され、必要なときに削除されるため、これが問題になることはありません。問題をデバッグする機会を得るために、コア ダンプを生成するようにしました。
ここで興味深いのは、GDB のバックトレースが次のようになっていることです。
(gdb) bt
#0 0x40281ae8 in raise () from /lib/libc.so.6
#1 0x402830ec in abort () from /lib/libc.so.6
#2 0x402830ec in abort () from /lib/libc.so.6
#3 0x402830ec in abort () from /lib/libc.so.6
#4 0x402830ec in abort () from /lib/libc.so.6
#5 0x402830ec in abort () from /lib/libc.so.6
#6 0x402830ec in abort () from /lib/libc.so.6
#7 0x402830ec in abort () from /lib/libc.so.6
#8 0x402830ec in abort () from /lib/libc.so.6
#9 0x402830ec in abort () from /lib/libc.so.6
エンドレスのアボート コール。原因がわかりません。スレッドは次のようになります。
(gdb) info threads
4 Thread 490 0x402e7bf4 in nanosleep () from /lib/libc.so.6
3 Thread 489 0x4031b384 in accept () from /lib/libc.so.6
2 Thread 501 0x402e7bf4 in nanosleep () from /lib/libc.so.6
* 1 Thread 486 0x40281ae8 in raise () from /lib/libc.so.6
スレッド 1 が無限のスリープ ループを持つメイン関数であるため、これも興味深いものです。
私の質問: どうすれば中絶の理由を知ることができますか?
フォーラム、IRC チャンネル、Google で検索していますが、それでも何もありません。私はこの数週間前に立ち往生したので、どんな情報でも大歓迎です!
どうもありがとうございました!