DWARF调试分析专家Skill dwarf-expert

此技能专注于分析DWARF调试文件,理解DWARF标准(版本3至5),解析和验证DWARF数据,适用于软件开发中的调试工具链。提供专业知识支持调试信息提取、数据完整性检查和代码交互。关键词:DWARF、调试、分析、标准、验证、解析、软件开发、调试工具。

测试 0 次安装 0 次浏览 更新于 3/14/2026

名称: dwarf-expert 描述: 提供分析DWARF调试文件和理解DWARF调试格式/标准(v3-v5)的专业知识。触发于理解DWARF信息、交互DWARF文件、回答DWARF相关问题或处理解析DWARF数据的代码时。 允许的工具:

  • Read
  • Bash
  • Grep
  • Glob
  • WebSearch

概述

此技能提供关于DWARF标准及如何与DWARF文件交互的技术知识和专业知识。任务包括回答DWARF标准问题、提供各种DWARF功能示例、解析和/或创建DWARF文件,以及编写/修改/分析与DWARF数据交互的代码。

何时使用此技能

  • 理解或解析编译二进制文件中的DWARF调试信息
  • 回答关于DWARF标准(v3、v4、v5)的问题
  • 编写或评审与DWARF数据交互的代码
  • 使用dwarfdumpreadelf提取调试信息
  • llvm-dwarfdump --verify验证DWARF数据完整性
  • 处理DWARF解析库(libdwarf、pyelftools、gimli等)

何时不使用此技能

  • DWARF v1/v2分析: 专业知识仅限于版本3、4和5。
  • 通用ELF解析: 如果不需要DWARF数据,请使用标准ELF工具。
  • 可执行文件调试: 使用专用调试工具(gdb、lldb等)调试可执行代码/运行时行为。
  • 二进制逆向工程: 使用专用逆向工程工具(Ghidra、IDA),除非专门分析DWARF部分。
  • 编译器调试: DWARF生成问题是编译器特定的,不在此覆盖。

权威来源

当需要特定DWARF标准信息时,使用这些权威来源:

  1. 官方DWARF标准(dwarfstd.org: 使用网络搜索在dwarfstd.org上查找官方DWARF规范的特定部分。搜索查询如“DWARF5 DW_TAG_subprogram attributes site:dwarfstd.org”是有效的。

  2. LLVM DWARF实现: LLVM项目的DWARF处理代码位于llvm/lib/DebugInfo/DWARF/,可作为可靠的参考实现。关键文件包括:

    • DWARFDie.cpp - DIE处理和属性访问
    • DWARFUnit.cpp - 编译单元解析
    • DWARFDebugLine.cpp - 行号信息
    • DWARFVerifier.cpp - 验证逻辑
  3. libdwarf: 参考C实现位于github.com/davea42/libdwarf-code,提供DWARF数据结构的详细处理。

验证工作流

使用llvm-dwarfdump验证选项来验证DWARF数据完整性:

结构验证

# 验证DWARF结构(编译单元、DIE关系、地址范围)
llvm-dwarfdump --verify <二进制文件>

# 详细错误输出与摘要
llvm-dwarfdump --verify --error-display=full <二进制文件>

# 机器可读的JSON错误摘要
llvm-dwarfdump --verify --verify-json=errors.json <二进制文件>

质量指标

# 输出调试信息质量指标为JSON
llvm-dwarfdump --statistics <二进制文件>

--statistics输出有助于比较不同编译器版本和优化级别的调试信息质量。

常见验证模式

  • 编译后: 验证二进制文件在分发前具有有效DWARF
  • 比较构建: 使用--statistics检测调试信息质量退化
  • 调试调试器: 识别导致调试器问题的畸形DWARF
  • DWARF工具开发: 针对已知良好二进制文件验证解析器输出

解析DWARF调试信息

readelf

ELF文件可以通过readelf命令解析({baseDir}/reference/readelf.md)。用于通用ELF信息,但首选dwarfdump进行DWARF特定解析。

dwarfdump

DWARF文件可以通过dwarfdump命令解析,这比readelf更有效地解析和显示复杂DWARF信息,应用于大多数DWARF解析任务({baseDir}/reference/dwarfdump.md)。

处理代码

此技能支持编写、修改和评审与DWARF数据交互的代码。这可能涉及从头解析DWARF调试数据的代码,或利用库解析和交互DWARF数据的代码({baseDir}/reference/coding.md)。

选择您的方法

┌─ 需要验证DWARF数据完整性?
│   └─ 使用`llvm-dwarfdump --verify`(见上文验证工作流)
├─ 需要回答关于DWARF标准的问题?
│   └─ 搜索dwarfstd.org或参考LLVM/libdwarf源代码
├─ 需要简单的部分转储或通用ELF信息?
│   └─ 使用`readelf`({baseDir}/reference/readelf.md)
├─ 需要解析、搜索和/或转储DWARF DIE节点?
│   └─ 使用`dwarfdump`({baseDir}/reference/dwarfdump.md)
└─ 需要编写、修改或评审与DWARF数据交互的代码?
    └─ 参考编码参考({baseDir}/reference/coding.md)