llvm-dwarfdump - 转储和验证 DWARF 调试信息

概要

llvm-dwarfdump [选项] [文件名 …]

描述

llvm-dwarfdump 解析对象文件、归档文件和 .dSYM 包中的 DWARF 节,并以人类可读的形式打印其内容。除非指定了节特定选项之一或 --all,否则仅打印 .debug_info 节。

如果未指定输入文件,则默认使用 a.out。如果使用 - 作为输入文件,则 llvm-dwarfdump 从其标准输入流读取输入。

选项

-a, --all

转储所有受支持的 DWARF 节。

--arch=<arch>

转储指定 CPU 架构的 DWARF 调试信息。架构可以通过名称或数字指定。此选项可以多次指定,每次指定一个所需的架构。默认情况下将打印所有 CPU 架构。

-c, --show-children

当使用 --debug-info=<offset> 参数或诸如 --find--name 之类的选项选择性打印时,显示调试信息条目的子项。

--color

在输出中使用颜色。

--error-display=<value>

设置验证时要显示的详细程度和摘要级别。暗示 --verify。支持的值为

quiet - 仅显示是否发生错误。summary - 仅显示发现的错误的摘要。details - 详细显示每个错误,但不显示摘要。full - 显示每个错误以及摘要。[默认]

-f <name>, --find=<name>

在加速表中搜索确切的文本 <name>,并打印匹配的调试信息条目。当没有加速表或在加速表中找不到您要查找的 DIE 的名称时,请尝试使用速度较慢但更完整的 --name 选项。

-F, --show-form

在 DWARF 属性类型之后显示 DWARF 形式类型。

-h, --help

显示此命令的帮助和用法。

--help-list

显示此命令的帮助和用法,而不将选项分组到类别中。

-i, --ignore-case

使用 --name 时忽略大小写区分。

-n <name>, --name=<name>

查找并打印名称(DW_AT_name 属性)为 <name> 的所有调试信息条目。

--lookup=<address>

在调试信息中查找 <address>,并打印出文件、函数、块和行表详细信息。

-o <path>

将输出重定向到 <path> 指定的文件,其中 - 是标准输出流。

-p, --show-parents

当使用 --debug-info=<offset> 参数或诸如 --find--name 之类的选项选择性打印时,显示调试信息条目的父项。

--parent-recurse-depth=<N>

当显示调试信息条目的父项时,仅显示到最大深度 <N>。

--quiet

--verify 一起使用,不输出到 STDOUT

-r <N>, --recurse-depth=<N>

当显示调试信息条目时,仅显示到最大深度 <N> 的子项。

--show-section-sizes

显示所有调试节的大小,以字节表示。

--show-sources

打印调试信息中提到的所有源文件。尽可能给出绝对路径。

--statistics

收集调试信息质量指标,并将结果打印为机器可读的单行 JSON 输出。输出格式在下面的部分中描述 (统计输出格式)。

--summarize-types

缩写类型单元条目的描述。

-x, --regex

在使用 --name 搜索时,将任何 <name> 字符串视为正则表达式。如果还指定了 --ignore-case,则正则表达式变为不区分大小写。

-u, --uuid

显示每个架构的 UUID。

--diff

以更友好的格式转储输出,以便比较来自两个不同文件的 DWARF 输出。

-v, --verbose

转储时显示详细信息。这可以帮助调试 DWARF 问题。

--verify

通过验证编译单元链、DIE 关系图、地址范围等来验证 DWARF 信息的结构。

--verify-json=<path>

将 JSON 格式的错误摘要输出到 <path> 指定的文件。暗示 --verify。输出格式在下面的部分中描述 (验证 JSON 输出格式)。

--version

显示工具的版本。

--debug-abbrev, --debug-addr, --debug-aranges, --debug-cu-index, --debug-frame [=<offset>], --debug-gnu-pubnames, --debug-gnu-pubtypes, --debug-info [=<offset>], --debug-line [=<offset>], --debug-line-str, --debug-loc [=<offset>], --debug-loclists [=<offset>], --debug-macro, --debug-names, --debug-pubnames, --debug-pubtypes, --debug-ranges, --debug-rnglists, --debug-str, --debug-str-offsets, --debug-tu-index, --debug-types [=<offset>], --eh-frame [=<offset>], --gdb-index, --apple-names, --apple-types, --apple-namespaces, --apple-objc

按名称转储指定的 DWARF 节。默认情况下仅显示 .debug_info 节。某些条目支持添加 =<offset> 作为一种方式,以提供要在相应节中转储的确切条目的可选偏移量。当提供偏移量时,将仅转储该偏移量处的条目,否则将转储整个节。

--debug-macro 选项同时打印 .debug_macro 和 .debug_macinfo 节。

--debug-frame--eh-frame 选项是别名,在同时存在这两个节的情况下,一个命令输出两个节。

@<FILE>

<FILE> 读取命令行选项。

统计输出格式

--statistics 选项生成单行 JSON 输出,表示已处理的调试信息的质量指标。这些指标对于比较两个编译器之间的更改非常有用,特别是用于判断编译器更改对调试信息质量的影响。

输出格式为键值对。第一个键值对包含版本号。以下命名方案用于键

  • variables ==> 局部变量和参数

  • local vars ==> 局部变量

  • params ==> 形参

对于聚合值,使用以下键

  • sum_of_all_variables(…) ==> 应用于所有变量的总和

  • #bytes ==> 字节数

  • #variables - entry values … ==> 变量数,不包括入口值等。

验证 JSON 输出格式

--verify-json 创建的 JSON 输出格式为

{
  "error-categories": {
    "<first category description>": {"count": 1234},
    "<next category description>": {"count": 4321}
  },
  "error-count": 5555
}

如果未报告错误,则生成以下内容

{
  "error-categories": {},
  "error-count": 0
}

退出状态

如果输入文件已成功解析和转储,llvm-dwarfdump 返回 0。否则,返回 1。

另请参阅

dsymutil(1)