まれにデッドロックが発生するマルチスレッド C++ プログラムがあります。この問題は再現が難しく、リモート マシンでしか再現できません。この問題を解決するために使用したい方法は
- プログラムを実行する
- デッドロックを待つ
- コアダンプを生成するために中止信号を送信します
- ダンプをローカル マシンにコピーする
- gdb を使用してデバッグします
リモート マシンに gdb がなく、何もインストールできません。問題は、コア ダンプ (リモート マシンでデッドロックされたプロセスまたは正常に実行されているプロセスから取得) をデバッグしているときに、ほとんどのスレッドのバック トレースが次のようにしか表示されないことです。
(gdb) ところで #0 pthread_cond_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:261 #1 0x0000000000000000 in ?? ()
「-g -O1」オプションでコンパイルされた静的にリンクされたバイナリを使用しています。ローカル マシンで同じバイナリのプロセスを中止すると、gdb はコア ダンプからスタック全体を抽出でき、そのような問題はありません (ただし、デッドロックは再現できません)。リモート マシンは SLES で、ローカル マシンは ubuntu です。
何か案が?
編集:
同じ問題を抱えている他の誰かを見つけましたが、まだ解決策はありません: http://groups.google.com/group/google-coredumper/browse_thread/thread/2ca9bcf9465d1050 (私は Google コアダンパーを使用していませんが、Google コアダンパーが失敗したようです同じエラーで、これはおそらく問題が SLES 11 にあることを示唆しています)