2012-07-19 19 views
13

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

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

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

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

+0

libdwarfは、あなたが探しているものです –

+0

提案していただきありがとうございます。私はdwarfdumpを試して、関数が宣言されている箇所だけを表示し、呼び出される場所は表示しません。私はちゃんと書類を見つけることができませんでした... – steffen

+2

'bfd'はhttp://en.wikipedia.org/wiki/Binary_File_Descriptor_libraryです(もともとはBFDの他の意味を表していました:) – ecatmur

答えて

6

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

また、backtraceライブラリ、またはより高いレベルのstacktraceライブラリを確認することができます。
あなたが求めているのは正確ではありませんが、役に立つと分かるかもしれません。

+1

tippsありがとうございました。 'dladdr()'を使用すると、マニュアルページを正しく理解すれば、動的にリンクされたコードと行だけでなく、ファイル名のみの情報が得られます。私はすでにバックトレースを使用してアドレスを取得しています。私が今必要とするのは、アドレスからファイルと行を取得することです。 stacktraceはバックトレース用の単なるラッパーです。 – steffen

+0

これらに加えて、 'libunwind'ライブラリもあります:http://www.nongnu.org/libunwind/ –

関連する問題