デバッグ シンボルを持たないプログラムのコア ダンプに格納されているフレームにアクセスしたい (C でこれを行いたい)。プログラムと GDB 内のコア ダンプを開くと、関数の名前を含むスタック トレースが表示されます。例えば:
(gdb) bt
#0 0x08048443 in layer3 ()
#1 0x08048489 in layer2 ()
#2 0x080484c9 in layer1 ()
#3 0x0804854e in main ()
すべての関数の名前は、実行可能ファイルの .strtab セクションに保存されます。異なるフレームでスタック トレースを構築するにはどうすればよいですか? GDB をバッチ モードで実行することはオプションではありません。また、コードが独立して書かれていないため、「必要な部分をgdbからコピーする」だけでも悪い考えです。
私の質問をより正確にするために、スタック情報の読み取りを開始できるコアダンプ内のポイントはどこにありますか? それらの情報にアクセスするための何らかのライブラリはありますか? 使用できる構造体? またはさらに良いのは、これらの情報がコア ダンプ内でどのように構造化されているかのドキュメントですか?
(「 gdbなどの外部ツールを呼び出さずに、C言語でコアダンプファイルからスタックトレースを生成する方法」という質問はすでに見ましたが、有効な回答がないので、もう一度質問しようと思いました)
[編集] Linux x86でこれをやっています