【问题标题】:objdump --dwarf of assembly code does not list functionobjdump --dwarf 的汇编代码没有列出函数
【发布时间】:2016-07-25 10:07:23
【问题描述】:

我编写了简单的 x86 汇编程序:

$ cat asm.s

.global foo

.section .text
foo:
    nop
    ret

并用

编译它
$ gcc -c -g asm.s -o asm.o

但是当我执行objdump --dwarf asm.o 时,它不会显示任何有关函数foo 的信息。看起来,gcc 没有创建关于foo.debug_info 详细信息。

顺便说一句,.symtab 中有一个 foo 的条目。

有什么想法吗?

【问题讨论】:

  • 函数没有被调用。也许它被优化为死代码?
  • @JanHenke 谢谢。 asm.s 是编译单元之一。我从其他编译单元中定义的 main() 调用它。除此之外,我没有使用任何 gcc 优化选项。否则它不会出现在符号表中。对吗?

标签: gcc elf objdump dwarf readelf


【解决方案1】:

错误在 objdump 命令中。使用下面的命令,它会显示你的函数的汇编列表:

    objdump -d -M intel -S asm.o

现在您更新了问题 - 如果您想包含调试信息,请使用以下命令调用汇编程序:

    gcc -gdwarf2 -c  asm.s -o asm.o

现在 objdump --dwarf 将显示调试信息。

【讨论】:

  • 没有。带有 -d 选项的 objdump 会反汇编代码。但我问的是 --dwarf 选项。 (更新的问题标题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 2019-08-07
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多