为什么没有DWARF信息?

时间:2016-11-17 04:04:13

标签: dwarf

我使用以下命令将源文件(hello.c)编译为可执行文件(hello),并期望转储可执行文件的DWARF信息。但是,无论使用“readelf -wi hello”还是“llvm-dwarfdump hello”,都没有DWARF信息。我想知道哪里出了问题。

clang-3.5 -gdwarf-4 -O0 -emit-llvm -c hello.c -o hello.bc
llc -dwarf-version=4 -O0 -filetype=obj hello.bc
gcc hello.o -o hello

2 个答案:

答案 0 :(得分:0)

问题是由于clang和llvm之间的不匹配。我正在使用llvm-3.9和clang-3.5。我通过将clang-3.5升级到clang-3.9解决了问题。具体来说,我将clang-3.9添加到llvm_src / tools,然后重新编译llvm。

答案 1 :(得分:-1)

我用clang-5.0和gcc-6.4.0尝试了相同的命令,似乎对我有用。

$ llvm-dwarfdump hello | more
hello:  file format ELF64-x86-64

.debug_abbrev contents:
Abbrev table for offset: 0x00000000
[1] DW_TAG_compile_unit DW_CHILDREN_yes
    DW_AT_producer  DW_FORM_strp
    DW_AT_language  DW_FORM_data2
. . .

$ readelf -wi hello | more
Contents of the .debug_info section:

  Compilation Unit @ offset 0x0:
  Length:        0x75 (32-bit)
  Version:       4
  Abbrev Offset: 0x0
  Pointer Size:  8
  <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
  . . .