https://www.ibm.com/developerworks/cn/aix/library/au-dwarf-debug-format/
简介
DWARF(使用有属性的记录格式进行调试 )是许多编译程序和调试程序所使用的一种调试文件格式,可以支持源代码级的调试。它是对象文件内的调试信息的格式。程序的 DWARF 描述是一个树形结构,每个节点都可以有子节点或兄弟节点。节点可能代表类型、变量或函数。
DWARF 使用一系列的调试信息条目(DIE)来定义源程序的一个低级表示。每个调试信息条目由一个识别标记和一系列属性组成。条目或条目组提供了在源程序中的相应实体的描述。标记指定了条目所属的类,而属性定义了条目的具体特点。
DWARF 部分
组成 DWARF 数据的不同 DWARF 部分如下:
.debug_abbrev
部分包含 DWARF 编译的所编译单元的缩写表。单个编译单元的缩写表包含一系列的缩写声明。每个声明都为一个特定的调试信息条目指定了标记和属性。缩写表中的相应条目会帮助您找到直接包含在 .debug_info
部分中的信息的解释。.
debug_info
部分包含符号的原始信息。每个编译单元都与一个特定的缩写表关联,但多个编译单元可以共享同一个表。
DWARF 表示
有一些获得了许可的工具,比如 readelf、dwarfdump 和 libdwarf,它们可用于读取 DWARF 信息。脚本或程序可以读取这些工具的输出,以查找和解释所需的信息。重要的是知道编写此类脚本的标记和属性定义。
常用的标记和属性
下面的列表显示了在调试 C++ 应用程序时最受关注的标记。