DWARF
| Input | Output | Alias |
|---|---|---|
| ✔ | ✗ |
描述
DWARF 格式解析 ELF 文件(可执行文件、库或目标文件)中的 DWARF 调试符号。
它类似于 dwarfdump,但速度更快(每秒数百 MB)并支持 SQL。
它为 .debug_info 部分中的每个调试信息条目(DIE)生成一行,并包括 DWARF 编码用于终止树中子项列表的 "null" 条目。
信息
.debug_info 由 单元 组成,这些单元对应于编译单元:
- 每个单元是一个 DIE 的树,
compile_unitDIE 作为根节点。 - 每个 DIE 有一个 标签 和一个 属性 列表。
- 每个属性有一个 名称 和一个 值(以及一个 表单,指定值的编码方式)。
DIE 表示源代码中的事物,它们的 标签 告诉你这是什么类型的东西。例如,有:
- 函数(标签 =
subprogram) - 类/结构/枚举(
class_type/structure_type/enumeration_type) - 变量(
variable) - 函数参数(
formal_parameter)。
树形结构反映了相应的源代码。例如,class_type DIE 可以包含表示类方法的 subprogram DIE。
DWARF 格式输出以下列:
offset- DIE 在.debug_info部分中的位置size- 编码 DIE 中的字节数(包括属性)tag- DIE 的类型;常规的 "DW_TAG_" 前缀省略unit_name- 包含此 DIE 的编译单元名称unit_offset- 包含此 DIE 的编译单元在.debug_info部分中的位置ancestor_tags- 当前 DIE 在树中的祖先标签数组,从最内层到最外层的顺序ancestor_offsets- 与ancestor_tags并行的祖先偏移量- 从属性数组中便利复制的几个常见属性:
namelinkage_name- 混淆的完全限定名称;通常只有函数有此属性(但并非所有函数都有)decl_file- 声明此实体的源代码文件的名称decl_line- 声明此实体的源代码中的行号
- 描述属性的并行数组:
attr_name- 属性的名称;常规的 "DW_AT_" 前缀省略attr_form- 属性的编码和解释方式;常规的 DW_FORM_ 前缀省略attr_int- 属性的整数值;如果属性没有数字值,则为 0attr_str- 属性的字符串值;如果属性没有字符串值,则为空
示例用法
DWARF 格式可用于查找具有最多函数定义的编译单元(包括模板实例化和来自包含头文件的函数):