23

C++ プログラム内から addr2line (関数呼び出しのバックトレースからのファイルと行) によって提供される情報を取得する必要があります。addr2line に似たライブラリ呼び出しはありますか?

編集: Linux 環境で作業しています。

addr2line を直接呼び出すことができることと、自分のプログラムで addr2line のソース コードを使用できることを知っています(これも GPL ライセンスです)。しかし、ライブラリ関数が存在する場合は、それを呼び出す方がクリーンだと思います。

編集: addr2line と同じように、binutils の bfd を使用します。とにかくbfdとはどういう意味ですか?

4

2 に答える 2

7

addr2line の bsd 実装のソース コードを確認してください。約 400 行のコードしかありません。ソースをライブラリ関数に変更するのは非常に簡単です。http://sourceforge.net/p/elftoolchain/code/HEAD/tree/trunk/addr2line/addr2line.c

于 2013-02-28T07:18:12.090 に答える
6

機能を試すことができますdladdr()。デバッグ情報ではなく、プログラムの動的シンボルを使用します (プログラムを でコンパイルしますgcc -rdynamic)。

また、バックトレースライブラリ、または上位レベルのスタックトレースライブラリを確認することもできます。
あなたが求めているものとは正確には異なりますが、役に立つかもしれません。

于 2012-07-19T08:23:13.807 に答える