如何检查程序是否使用debugging符号编译?

我想在GIMP中跟踪一些代码,因此需要启用debugging符号的GIMP。 我不记得编译过程中是否启用了它们。 如何检查,而不重新编译程序?

你可以在Linux上使用fileobjdump 。 尤其是,你可以看看文件是否“剥离”或“没有剥离”,以及是否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命令。

Interesting Posts