2013-11-22 8 views
5

私はx86ライブラリにコンパイルされたライブラリ、すなわち共有ライブラリ(つまり* .so)を持っており、それらがデバッグシンボルでコンパイルされているかどうかを(-g/debugビルドオプションで)素早く判断したいと思います。与えられた共有ライブラリを知るにはデバッグシンボルでビルドされているかどうか?

どうすれば確認できますか?

+0

objdumpファイル名-x | grep 'debug' – starrify

+0

[プログラムがデバッグシンボルでコンパイルされているかどうかをチェックする方法?](http://stackoverflow.com/questions/3284112/how-to-check-if-program-was-compiled-with-デバッグシンボル) –

答えて

9

fileコマンドを使用して、ファイルがstrippedであるかどうかを確認できます。基本的に、これはデバッグシンボルがそこにあることを意味します。

$ file libjsd.so 
    libjsd.so: ELF 32-bit LSB shared object, \ 
    Intel 80386, version 1 (SYSV), dynamically linked, 
    stripped 

お知らせ剥奪:

はここに私のシステムから1つのファイルです。

$ file libprofile_rt.so 
libprofile_rt.so: ELF 64-bit LSB shared object, x86-64, 
     version 1 (SYSV), dynamically linked, 
    BuildID[sha1]=0x..., not stripped 

はそれはそれはデバッグシンボルをしたことを示し、「取り除かない」を参照してください。

は、ここで私がコンパイル何か。

objcopyを使用して、共有オブジェクト自体からデバッグシンボルを分離することもできます。これは、別のファイルのシンボルを抽出し、それらを元に戻すためにリンクを知る必要があります。 build-idsを使用してdoing this with gdbの手順を見ることができます。これはシンボルなしで何かを配送したいが、ダンプからピンチでそれをデバッグできるようにする場合に役立ちます。

+0

異なるファイルlibqt5Gui.so.5.5.1.debugにデバッグシンボルを持つlibQt5Gui.so.5.5.1が表示されますが、ファイルコマンドはlibQt5Gui.so.5.5.1を削除していないことがわかります – Mohit

5

not strippedは、デバッグシンボルを意味するわけではありません。

ライブラリコード:

//myshared.c 
#include <stdio.h> 

void print_from_lib() 
{ 
    printf("Printed from shared library\n"); 
} 

とし、デバッグフラグなしでコンパイル:

gcc -c -Wall -Werror -fpic myshared.c 
gcc -shared -o libmyshared.so myshared.o 
gcc -g -c -Wall -Werror -fpic myshared.c -o myshared-g.o 
gcc -g -shared -o libmyshared-g.so myshared-g.o 

file

$ file libmyshared.so 
libmyshared.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=1ad3b94d5c8a7392c2140a647254753221a152cd, not stripped 
$ file libmyshared-g.so 
libmyshared-g.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0268eaf97e5a670d2f7e767a011be6f06a83090a, not stripped 

彼らは削除されませんどちらの主張を確認します。ただし、libmyshared-g.soには記号が表示されます:

$ objdump --syms libmyshared.so | grep debug 
$ objdump --syms libmyshared-g.so | grep debug 
0000000000000000 l d .debug_aranges 0000000000000000    .debug_aranges 
0000000000000000 l d .debug_info 0000000000000000    .debug_info 
0000000000000000 l d .debug_abbrev 0000000000000000    .debug_abbrev 
0000000000000000 l d .debug_line 0000000000000000    .debug_line 
0000000000000000 l d .debug_str 0000000000000000    .debug_str 
関連する問題