如何检查静态库以查看是否正在导出调试符号?

Spi*_*lly 18 c c++ static-libraries debug-symbols

我有一个静态库,我正在调试模式下构建,但当我进入它时,我仍然得到反汇编.我想知道如何使用nm或其他工具来确保调试符号没有被剥离.

alk*_*alk 21

您可以使用nm's选项--debug-syms,让nm列出包装到库中的对象的调试符号(如果有).

对于调试器符号,第二列指示N.

示例(假设对象example.o在库中)

nm --debug-syms libexample.a
Run Code Online (Sandbox Code Playgroud)

输出(摘录):

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
...
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅man nm.


sta*_*ney 0

下载适合您操作系统的Dependencywalker

它会检测您的 dll 是否有调试符号。如果您在“符号”下看到“无效”,则意味着调试符号已被删除。有效值为:PDB、CV、DBG 等。

  • Dependencywalker 仅支持动态库,不支持静态库。 (6认同)