114

x86 Linux でコンパイルしたライブラリがいくつかあり、それらがデバッグ シンボルを使用してコンパイルされているかどうかをすばやく判断したいと考えています。

4

7 に答える 7

95

提案されたコマンド

objdump --debugging libinspected.a
objdump --debugging libinspected.so

少なくとも Ubuntu/Linaro 4.5.2 では常に同じ結果が得られます。

libinspected.a:     file format elf64-x86-64
libinspected.so:     file format elf64-x86-64

-gアーカイブ/共有ライブラリがオプション付きであるかどうかに関係なく

使用されているかどうかを判断するのに本当に役立ったの-greadelfツールです。

readelf --debug-dump=decodedline libinspected.so

また

readelf --debug-dump=line libinspected.so

このようなデバッグ情報がライブラリに含まれている場合、これはソースファイル名、行番号、およびアドレスで構成される行のセットを出力します。そうでない場合は何も出力しません。

--debug-dumpの代わりにオプションに必要な任意の値を渡すことができますdecodedline

于 2012-10-09T14:04:22.640 に答える
46

役に立ったのは次のとおりです。

gdb mylib.so

デバッグ シンボルが見つからない場合は次のように表示されます。

Reading symbols from mylib.so...(no debugging symbols found)...done.

または見つかった場合:

Reading symbols from mylib.so...done.

以前の回答はどれも私にとって意味のある結果をもたらしませんでした.デバッグシンボルのないライブラリは多くの出力を提供していました.

于 2016-06-06T10:02:29.917 に答える
31

nm -a <lib>デバッグ用のものを含め、ライブラリからすべてのシンボルを出力します。

したがって、 と の出力を比較できnm <lib>ますnm -a <lib>。異なる場合は、lib にデバッグ シンボルが含まれています。

于 2010-01-04T13:56:24.220 に答える
12

これにはobjdumpを使用できます。

編集:マンページから:

-W
--dwarf
Displays  the  contents of the DWARF debug sections in the file, if
any are present.
于 2010-01-04T13:55:47.403 に答える
8

デバッグ情報がバイナリとは別のファイルに保存されている場合、つまりバイナリにデバッグ リンクセクションが含まれている場合の使用objdump --debuggingまたは機能しないことを示唆する回答。おそらく、それを のバグと呼ぶことができます。readelf --debug-dump=...readelf

次のコードは、これを正しく処理する必要があります。

# Test whether debug information is available for a given binary
has_debug_info() {
  readelf -S "$1" | grep -q " \(.debug_info\)\|\(.gnu_debuglink\) "
}

詳細については、GDB マニュアルの個別のデバッグ ファイルを参照してください。

于 2016-09-14T00:06:06.507 に答える