如何解码debug_line部分?

时间:2014-01-30 16:59:51

标签: debugging gcc elf dwarf

我正在试图弄清楚DWARF 2 debug_line部分是如何编码的。标准论文(http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf)对我没什么帮助,我真的不明白以下内容:

    .4byte  .debug_line
    .4byte  0x736e7502, 0x656e6769, 0x6e692064, 0x04070074

代表什么。那里有“unsigned int”字符串编码,但前面有0x02值..这代表什么?我甚至无法找到带有DWARF 2常量的标准枚举/定义标头..有人可以解释如何解析DWARF 2中的debug_line吗?

2 个答案:

答案 0 :(得分:4)

我知道,这是一个非常古老的问题,但可能会有人在寻找阅读.debug_line部分的方法。 我发现readelf能够解析它:

readelf --debug-dump=line <path/to/binary>

(或)

readelf --debug-dump=decodedline <path/to/binary>

首先显示您解释.debug_line内容,如Elf二进制文件中所示。其次,将所有数据组合成更结构化的视图,特别是给出了不同记录之间的引用.debug_line unit。

还有一个工具dwarfdump(在Ubuntu repos中可用),但我没有机会检查它。

答案 1 :(得分:1)

如果DWARF标准没有帮助,那么我真正建议的是阅读一些实现.debug_line解析的源代码。也许这会更清楚;或者也许与DWARF标准一起阅读它会有所帮助。这些信息有很多读者;一个相对简单的是GNU binutils;抓住源代码并在&#34; bfd / dwarf2.c&#34;中寻找.debug_line解码。

对于标准头文件,binutils还包含一个dwarf2.h。但你是对的 - 我不认为有一个标准的标题,而是各种项目(binutils,elfutils,libdwarf,可能是其他项目)制作自己的标题,通常来自DWARF规范。