addr2line
アドレスをファイル名と行番号に変換します。私はまだデバッグの初心者で、addr2line についていくつか質問があります。
特定の .so (バイナリ) ファイルをデバッグしている場合、ツールがそのソース コード ファイルを見つける方法 (どこから入手できるか!)、ソースが存在しない場合はどうなりますか?
バイナリのアドレスとそのソースの行番号の関係はどのようなものなので、 addr2line はこの種のマッピングを行うことができますか?
一般に、デバッグ情報を含むELF実行可能ファイルまたは共有ライブラリでaddr2line
最適に機能します。そのデバッグ情報は、 GCCに渡す(またはなど)ときにコンパイラによって出力されます。特に、ソース コードの場所 (ソース ファイルの名前、行番号、列番号) と関数、変数名、コール スタックフレーム構成などの間のマッピングを提供します。現在、デバッグ情報はDWARF形式です (また、デバッガー、ライブラリーなどによって...)。デバッグ情報にはソース ファイル パスが含まれていることに注意してください (ソース ファイル自体ではありません)。-g
-g2
gdb
libbacktrace
実際には、-g
(または-g2
) デバッグ オプションをGCCに渡すことができます (多くの場合、渡す必要があります) -O2
。その場合、デバッグ情報はわずかに正確ではありませんが、実際には使用できます。場合によっては、スタック フレームが消えることがあります (インライン化された関数呼び出し、テール コールの最適化など)。
strip(1)ユーティリティを使用して、一部の ELF実行可能ファイルからデバッグ情報 (およびその他のシンボル テーブルなど) を削除できます。