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

时间:2012-12-20 05:54:46

标签: c++ c static-libraries debug-symbols

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

4 个答案:

答案 0 :(得分:21)

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

对于调试器符号,第二列表示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

答案 1 :(得分:3)

您可以使用file命令,该命令可用于许多操作系统,包括通过Cygwin的Windows 如果它显示“未剥离”,则表示它具有调试信息。
作为旁注,对于静态库,使用ar来提取.o文件&直接使用file

答案 2 :(得分:3)

您可以使用strip -S libXX.a检查静态库大小是否已减少。如果静态库大小不包含调试符号,则不会更改。

在Mac OS上可以检查Xcode生成的静态库。

Linux and Unix strip command

答案 3 :(得分:0)

为您的操作系统下载Dependencywalker

它会检测你的dll是否有调试符号。如果在“符号”下看到“无效”,则表示调试符号已被剥离。有效值为:PDB,CV,DBG等