web-dev-qa-db-ja.com

静的ライブラリを調べて、デバッグシンボルがエクスポートされているかどうかを確認するにはどうすればよいですか?

デバッグモードで構築している静的ライブラリがありますが、それにステップインすると、逆アセンブリが発生します。 nmまたは別のツールを使用して、デバッグシンボルが削除されないようにする方法を知りたいです。

18
Spilly

nmのオプション--debug-symsを使用して、nmに、ライブラリにパックされたオブジェクトのデバッガシンボル(存在する場合)もリストさせることができます。

デバッガシンボルの場合、2番目の列はNを示します。

例(オブジェクトexample.oがライブラリにあると想定)

nm --debug-syms libexample.a

出力(抜粋):

example.o:
0000000000000000 b .bss
0000000000000000 n .comment
0000000000000000 d .data
0000000000000000 N .debug_abbrev    
0000000000000000 N .debug_aranges
0000000000000000 N .debug_info
0000000000000000 N .debug_line
0000000000000000 N .debug_loc
0000000000000000 N .debug_pubnames
0000000000000000 N .debug_str
0000000000000000 r .eh_frame
0000000000000000 n .note.GNU-stack
0000000000000000 r .rodata
0000000000000000 t .text
...

詳細については、man nmを参照してください。

21
alk

file コマンドを使用できます。これは、Cygwin経由のWindowsを含む多くのOSで使用できます。
「削除されていません」と表示されている場合は、デバッグ情報が存在することを意味します。
補足として、静的ライブラリの場合は、 ar を使用して.oファイルを抽出し、それらに対してfileを直接使用します。

strip -S libXX.aを使用して、静的ライブラリのサイズが縮小されているかどうかを確認できます。デバッグシンボルが含まれていない場合、静的ライブラリのサイズは変更されません。

Mac OSで動作し、Xcodeによって生成された静的ライブラリをチェックします。

LinuxおよびUnixストリップコマンド

3
eason

ダウンロード Dependencywalker お使いのOS用

Dllにデバッグシンボルがあるかどうかを検出します。 「シンボル」の下に「無効」と表示されている場合は、デバッグシンボルが削除されていることを意味します。有効な値は、PDB、CV、DBGなどです。

0
stamhaney