| 输入 | 输出 | 别名 |
|---|---|---|
| ✔ | ✗ |
描述
DWARF 格式可从 ELF 文件 (可执行文件、库或目标文件) 中解析 DWARF 调试符号。
它与 dwarfdump 类似,但速度要快得多 (可达数百 MB/s) ,并且支持 SQL。
它会为 .debug_info 部分中的每个调试信息条目 (DIE) 生成一行,
并包含 DWARF 编码中用于终止树状子节点列表的 “null” 条目。
.debug_info 由多个 unit 组成,它们对应于编译单元:- 每个 unit 都是一棵由 DIE 构成的树,并以
compile_unitDIE 作为根。 - 每个 DIE 都有一个 标签 和一个 属性 列表。
- 每个属性都有一个 名称 和一个 值 (以及一个 form,用于指定该值的编码方式) 。
- 函数 (标签 =
subprogram) - 类/struct/enum (
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一一对应- 为方便使用,从 attributes 数组中额外列出的一些常见属性:
namelinkage_name- 名称修饰后的完全限定名;通常只有函数才有该属性 (但并非所有函数都有)decl_file- 声明此实体的源代码文件名decl_line- 声明此实体的源代码行号
- 用于描述属性的并行数组:
attr_name- 属性名称;省略了惯用的 “DW_AT_” 前缀attr_form- 属性的编码和解释方式;省略了惯用的 DW_FORM_ 前缀attr_int- 属性的整数值;如果该属性没有数值,则为 0attr_str- 属性的字符串值;如果该属性没有字符串值,则为空
示例用法
DWARF 格式可用于查找函数定义最多的编译单元 (包括模板实例化以及来自所包含头文件的函数) :
Query
Response