3

addr2lineアドレスをファイル名と行番号に変換します。私はまだデバッグの初心者で、addr2line についていくつか質問があります。

  1. 特定の .so (バイナリ) ファイルをデバッグしている場合、ツールがそのソース コード ファイルを見つける方法 (どこから入手できるか!)、ソースが存在しない場合はどうなりますか?

  2. バイナリのアドレスとそのソースの行番号の関係はどのようなものなので、 addr2line はこの種のマッピングを行うことができますか?

4

1 に答える 1

5

一般に、デバッグ情報を含むELF実行可能ファイルまたは共有ライブラリでaddr2line最適に機能します。そのデバッグ情報は、 GCCに渡す(またはなど)ときにコンパイラによって出力されます。特に、ソース コードの場所 (ソース ファイルの名前、行番号、列番号) と関数、変数名、コール スタックフレーム構成などの間のマッピングを提供します。現在、デバッグ情報はDWARF形式です (また、デバッガーライブラリーなどによって...)。デバッグ情報にはソース ファイル パスが含まれていることに注意してください (ソース ファイル自体ではありません)。-g-g2gdblibbacktrace

実際には、-g(または-g2) デバッグ オプションをGCC渡すことができます (多くの場合、渡す必要があります) -O2。その場合、デバッグ情報はわずかに正確ではありませんが、実際には使用できます。場合によっては、スタック フレームが消えることがあります (インライン化された関数呼び出し、テール コールの最適化など)。

strip(1)ユーティリティを使用して、一部の ELF実行可能ファイルからデバッグ情報 (およびその他のシンボル テーブルなど) を削除できます。

于 2017-01-01T18:02:35.723 に答える