2017-01-01 13 views
1

addr2lineは、アドレスをファイル名と行番号に変換します。私はまだデバッグの初心者であり、addr2lineに関するいくつかの質問があります。addr2lineはどのようにソースファイルとコード行を見つけることができますか?

  1. の場合は(それを得ることができる場所から!)ツールは そのソースコードファイルを見つけることができますどのように特定の.so(バイナリ)ファイルを、デバッグ午前、ソースが存在しない場合はどう?

  2. バイナリのアドレスとそのソースの という数字との関係は何ですか?addr2lineはこのようなマッピングを行うことができますか?一般的に

答えて

3

addr2lineデバッグ情報をELFの実行可能ファイルまたは共有ライブラリに最も適しています。そのデバッグ情報はpass -g(または-g2など)からGCCにコンパイラによって発行されます。特に、ソースコードの場所(ソースファイルの名前、行番号、列番号)と関数、変数名、call stackフレーム構成などの間のマッピングを提供します。デバッグ情報は今日DWARF形式です(また、 gdb debugger、など)。デバッグ情報にソースファイルパス(ソースファイル自体ではない)が含まれていることに注意してください。

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

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

関連する問題