21

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

4

4 回答 4

24

您可以使用nm's option--debug-symsnm列出打包到库中的对象的调试器符号(如果有)。

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

于 2012-12-20T07:37:02.990 回答
4

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

于 2012-12-20T06:14:52.690 回答
3

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

它适用于 Mac OS 来检查 Xcode 生成的静态库。

Linux 和 Unix 剥离命令

于 2016-01-07T03:32:49.333 回答
0

为您的操作系统下载Dependencywalker

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

于 2012-12-20T06:00:48.190 回答