如何检查程序是否使用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
命令。