開発者の皆様、こんにちは。
C++ プログラムからスタック ダンプを分析しようとしています。この特定のプログラムでは、シグナル ハンドラーを作成しており、シグナル ハンドラー内には以下のようなコードがあります。
res = backtrace(arr, size);
if (res > 0)
{
btrace = backtrace_symbols(arr, size);
}
for ( unsigned int i =0; i < size ; ++i )
{
log_error(" trace: %s", btrace[i] );
}
トレースを取得することはできますが、期待しているアドレスを見つけることができません。他のスレッドがスタックトレース バッファーをいっぱいにした可能性があるかどうか疑問に思っています (組み込みデバイスであり、バッファー サイズが制限されているため)。スタックトレースをスレッドごとに識別/フィルタリングする方法、またはスタックトレースをセグメンテーション違反をキャッチしたスレッドのみに制限するオプションはありますか。
注:スタックトレースに存在する実行可能ファイルから 2 つのアドレスを特定できます。ごく最近のものはシグナル ハンドラ自体のアドレスで、2 つ目は別のスレッドからのものです。
マルチスレッド環境でバックトレースがどのように機能するかについて、リソースをグーグルで検索しようとしました。オンですが、あまり情報が見つからないので、ここにいます。
ありがとう