如何检查程序是否使用debugging符号编译?
我想在GIMP中跟踪一些代码,因此需要启用debugging符号的GIMP。 我不记得编译过程中是否启用了它们。 如何检查,而不重新编译程序?
你可以在Linux上使用file和objdump 。 尤其是,你可以看看文件是否“剥离”或“没有剥离”,以及是否objdump --syms输出任何有用的东西(对我来说,它说“没有符号”的常规构build)。 
 运行objdump --syms命令时,输出中看不到“ 无符号 ”(至less对于内核对象 )。 
 要检查内核对象中是否有debugging信息,可以在objdump命令的末尾添加以下内容: | grep debug  | grep debug 。 
如果find这个string,就知道内核对象包含debugging信息。 如果不是,那么这是一个“干净”的内核对象。
没有debugging信息的内核模块的例子:
 geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 
与debugging信息一起编译的相同内核模块的示例:
 geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 00000000 ld .debug_frame 00000000 .debug_frame 00000000 ld .debug_info 00000000 .debug_info 00000000 ld .debug_abbrev 00000000 .debug_abbrev 00000000 ld .debug_loc 00000000 .debug_loc 00000000 ld .debug_aranges 00000000 .debug_aranges 00000000 ld .debug_ranges 00000000 .debug_ranges 00000000 ld .debug_line 00000000 .debug_line 00000000 ld .debug_str 00000000 .debug_str 00000010 l .debug_frame 00000000 $d 
 正如你所看到的,第一个输出什么都不返回,而第二个输出返回debug行。 
 注意:在我的情况下, file命令在debugging和非debugging的情况下都返回了“不被剥离”。 然而,核心对象的大小差异是显着的: 
- 约。 16k没有debugging信息
- 约。 137Kdebugging信息
显然,后者版本里面有debugging信息。
 我的问题是:在这种情况下file命令是否可靠? 从我所经历的,我依靠objdump --syms ... | grep debug  objdump --syms ... | grep debug命令。