6

さっき読んだ

gcc C++ アプリがクラッシュしたときにスタックトレースを生成する方法

これは今ではかなり古いものです(5年)。いくつかの回答は、スタックフレームごとに、関数の名前とオフセット(私が推測するスタック内)を取得できるソリューションを提案しています。しかし、私 (および他の人) が本当に必要としているのは、呼び出しが行われたソース ファイル名と行番号です (コードがデバッグ情報でコンパイルされていると仮定します)。これを行うglibcの一部にリンクされた回答の1つ(libSegfault;このディレクトリ内のファイルを参照- segfault.c、、、)-したがって、backtracesyms.c可能ですbacktracesymsfd.c

私の質問は次のとおりです。

  • この情報は、プラットフォームに依存しない方法で、または何らかの標準 (POSIX??) に準拠する方法で抽出できますか?
  • libunwind がこれをサポートしないのはなぜですか? (ウェブサイトを調べた後、そうではないと思います
  • これは、コンパイラの C/C++ 標準ライブラリ (少なくとも C/C++ アプリの場合) に依存する必要がありますか?

ノート:

  • バイナリにはデバッグ情報があると思われるかもしれません。したがって、C/C++ の場合は-g;でコンパイルされています。もちろん、適切なライブラリでは、デバッグ情報が利用可能かどうかを確認します。
4

2 に答える 2