代码之家  ›  专栏  ›  技术社区  ›  Lukasz Czerwinski

如何检查程序是否用调试符号编译[[副本]

  •  59
  • Lukasz Czerwinski  · 技术社区  · 14 年前

    我想在GIMP中跟踪一些代码,因此需要启用调试符号的GIMP。我不记得在编译期间是否启用了它们。如何在不重新编译程序的情况下进行检查?

    2 回复  |  直到 14 年前
        1
  •  87
  •   Rick Jim DeLaHunt    4 年前

    你可以用 file objdump 在Linux上。特别地, 你可以看看文件上写的是“剥皮”还是“不剥皮” Ubuntu 20.04.1 LTS ,是否使用 -g 还是不演出 not stripped 具有 -克 with debug_info, 除此之外),以及 objdump --syms 输出任何有用的东西(对我来说,对于常规构建,它说“没有符号”)。

        2
  •  59
  •   GeertVc    10 年前

    objdump --syms 命令,我看到的远不止“ 没有符号 “在输出中(至少,对于 内核对象

    要检查内核对象中是否有调试信息,可以在 objdump | grep debug .

    我编译的内核模块的示例 没有 调试信息:

    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
    

    具有 调试信息:

    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 l    d  .debug_frame   00000000 .debug_frame
    00000000 l    d  .debug_info    00000000 .debug_info
    00000000 l    d  .debug_abbrev  00000000 .debug_abbrev
    00000000 l    d  .debug_loc     00000000 .debug_loc
    00000000 l    d  .debug_aranges 00000000 .debug_aranges
    00000000 l    d  .debug_ranges  00000000 .debug_ranges
    00000000 l    d  .debug_line    00000000 .debug_line
    00000000 l    d  .debug_str     00000000 .debug_str
    00000010 l       .debug_frame   00000000 $d
    

    如您所见,第一个输出不返回任何内容,而第二个输出返回带有 debug 在里面。

    file 司令部给我的答复是“没有脱光衣服” 二者都 调试和非调试案例。但是,内核对象的大小差异非常显著:

    • 约16k,无调试信息
    • 约137k,带调试信息

    显然,后一个版本中有调试信息。

    我的问题是:是不是 在这种情况下指挥可靠吗? 从我的经历来看,我依靠 objdump --syms ... | grep debug 命令。