さっき読んだ
gcc C++ アプリがクラッシュしたときにスタックトレースを生成する方法
これは今ではかなり古いものです(5年)。いくつかの回答は、スタックフレームごとに、関数の名前とオフセット(私が推測するスタック内)を取得できるソリューションを提案しています。しかし、私 (および他の人) が本当に必要としているのは、呼び出しが行われたソース ファイル名と行番号です (コードがデバッグ情報でコンパイルされていると仮定します)。これを行うglibcの一部にリンクされた回答の1つ(libSegfault;このディレクトリ内のファイルを参照- segfault.c
、、、)-したがって、backtracesyms.c
可能です。backtracesymsfd.c
私の質問は次のとおりです。
- この情報は、プラットフォームに依存しない方法で、または何らかの標準 (POSIX??) に準拠する方法で抽出できますか?
- libunwind がこれをサポートしないのはなぜですか? (ウェブサイトを調べた後、そうではないと思います)
- これは、コンパイラの C/C++ 標準ライブラリ (少なくとも C/C++ アプリの場合) に依存する必要がありますか?
ノート:
- バイナリにはデバッグ情報があると思われるかもしれません。したがって、C/C++ の場合は
-g
;でコンパイルされています。もちろん、適切なライブラリでは、デバッグ情報が利用可能かどうかを確認します。