SEGFAULT シグナルによって非常にランダムにクラッシュする Linux 組み込みシステム用のマルチスレッド プログラムを使用しています。
クラッシュは本番環境でのみ発生し、テスト中には発生しないため、gdb を使用せずに問題を見つける必要があります。
プログラムのシンボル テーブルを知っていて、メイン スレッドで sigaction() と backtrace() を使用していますが、十分な情報が得られません。バックトレースされた行は、sigaction 関数自体からのものです。50 フレームのキャプチャを許可し、コンパイルには gcc で -g フラグを使用します。
Caught segfault at address 0xe76acc
Obtained 3 stack frames.
./mbca(_Z11print_tracev+0x20) [0x37530]
./mbca(_Z18segfault_sigactioniP7siginfoPv+0x34) [0x375f4]
/lib/libc.so.6(__default_rt_sa_restorer_v2+0) [0x40db5a60]
プログラムは 15 のスレッドを実行しているため、どのスレッドからシグナルが送信されているかを把握して、可能性を制限できるようにしたいと考えています。参考までに、メイン スレッドはフォークを作成し、そのフォークは残りの 14 のスレッドを作成します。
どうすればこれを達成できますか? すでに持っている情報で何ができますか?
ご協力ありがとうございました
PD: コアダンプ ファイルも試しましたが、このオプションがカーネル コンパイルに含まれておらず、変更できないため生成されません。