了解符号的加载方式

Zxdb 应该会根据您的环境自动设置符号设置。

本部分介绍了 zxdb 如何加载符号。如果您在寻找 排查与 zxdb 符号化程序相关的常见问题,请参阅 诊断符号问题

build ID

Zxdb 使用二进制文件的 build ID

例如,如需查看 Linux 上二进制文件的 build ID,请转储 notes ELF 二进制文件:

$ readelf -n my_binary

  ... (some other notes omitted) ...

Displaying notes found in: .note.gnu.build-id
  Owner                Data size    Description
  GNU                  0x00000014   NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 18cec080fc47cdc07ec554f946f2e73d38541869

sym-stat zxdb 命令会显示每个二进制文件和库的 build ID 附加的进程中当前已加载的资源 ID。它还显示 相应的符号文件(如果找到)。

符号服务器

Zxdb 可以从 Google 服务器或上游加载预构建库的符号 debuginfod 台服务器。这是向 SDK 传递符号的机制 任何非本地构建的内容。如需了解详情,请参阅 下载符号

处理大型二进制文件时,符号可能会达到数 GB,因此 下载过程可能需要一些时间(通常在几分钟内)。 在下载符号时,sym-stat 命令会显示 Downloading...

当 zxdb 下载符号时,会将其存储在符号缓存中。通过 symbol-cache 设置包含此目录的名称。

例如:

[zxdb] get symbol-cache
symbol-cache = /home/me/.fuchsia/debug/symbol-cache

当 zxdb 从从上游提取的预构建二进制文件中下载符号时 则 debuginfo 可能没有相应的 ELF 二进制文件(具体取决于 服务器和软件包)。在这种情况下,zxdb 可能会显示错误, 如下所示:

...
binary for build_id 26820458adaf5d95718fb502d170fe374ae3ee70 not found on 5 servers
binary for build_id 53eaa845e9ca621f159b0622daae7387cdea1e97 not found on 5 servers
binary for build_id f3fd699712aae08bbaae3191eedba514c766f9d2 not found on 5 servers
binary for build_id 4286bd11475e673b194ee969f5f9e9759695e644 not found on 5 servers
binary for build_id 2d28b51427b49abcd41dcf611f8f3aa6a2811734 not found on 5 servers
binary for build_id 0401bd8da6edab3e45399d62571357ab12545133 not found on 5 servers
...

这表示在 debuginfod 服务器上找不到 ELF 二进制文件。 在这种情况下,ELF 符号不适用于这个特定的二进制文件, 这通常适用于大多数调试场景。最常用的 ELF 而可能不可用的特定符号为 PLT 符号。

您可以使用 sym-stat 命令验证 DWARF 信息是否已 已加载:

  libc.so.6
    Base: 0x1c85fdc2000
    Build ID: 0401bd8da6edab3e45399d62571357ab12545133
    Symbols loaded: Yes
    Symbol file: /home/alice/.fuchsia/debug/symbol-cache/04/01bd8da6edab3e45399d62571357ab12545133.debug
    Source files indexed: 1745
    Symbols indexed: 10130

.build-id 目录符号数据库

许多构建环境(包括主 fuchsia.git 代码库)都会 标准目录结构中名为 .build-id 的符号化二进制文件。这个 目录包含根据前两个名称命名的子目录。 二进制文件 build ID 的字符。这些子目录包含 根据 build ID 的剩余字符命名的文件。

您可以在命令行中设置一个或多个 build ID 目录,也可以 使用 build-id-dirs 设置(即一个目录列表) 路径。

例如,如需将 /home/alice/project/out/x64/.build-id 添加为 build-id-dirs,请使用以下代码:

zxdb 实例

[zxdb] set build-id-dirs += /home/alice/project/out/x64/.build-id

FFX

ffx debug symbol-index add --build-dir /home/alice/project/out/x64/.build-id

然后,在(folder) sym-stat,而非目录中包含的二进制文件数量。 这些二进制文件不会显示在 sym-stat --dump-index 输出中,因为 搜索符号时,zxdb 会按需搜索这些目录, 预先枚举它们。

单独的文件和目录

如果您的单个二进制文件不含任何其他符号数据库 您可以为该特定文件配置 zxdb。您可以使用 特定文件的 symbol-paths,只需将其添加到路径列表即可。

例如,如需将 /home/alice/project/a.out 添加到 symbol-paths 设置,请使用以下代码:

文件

[zxdb] set symbol-paths += /home/alice/project/a.out

目录

[zxdb] set symbol-paths += /home/me/project/build/

您可以查看使用 sym-stat 配置的位置的状态 命令。例如:

[zxdb] sym-stat
Symbol index status

  This command just refreshed the index.
  Use "sym-stat --dump-index" to see the individual mappings.

   Indexed  Source path
         1  /home/alice/a.out
         2  /home/alice/project/build/

ids.txt 符号索引

一些较旧的内部 Google 项目会生成一个名为 ids.txt 的文件。此文件 用于提供从二进制文件的 build ID 到本地文件上符号路径的映射, 系统。如果您的 build 生成了此类文件,但系统未自动加载该文件, 您可以使用 ids-txts 设置(文件名列表)为 Zxdb 指定该属性:

例如,如需将 /home/alice/project/build/ids.txt 添加到 ids-txts 设置,请使用以下代码:

[zxdb] set ids-txts += /home/alice/project/build/ids.txt

ids.txt 文件中的符号文件也会在您运行 sym-statsym-stat --dump-index 命令。

符号设置

下方所述的设置 了解 Zxdb 如何加载符号部分,获取 由您的环境自动应用。本部分将介绍 设置。

symbol-index-files 设置包含一个或多个 JSON 格式的文件, 由开发环境设置:

[zxdb] get symbol-index-files
symbol-index-files =
  • /home/alice/.fuchsia/debug/symbol-index.json

此文件可以包含一些全局设置,并引用其他 symbol-index 文件。通常情况下,您正在使用的每个构建环境都有一个 。

如果您在构建环境之间切换,并注意到符号 请确保您的环境已向 ffx debug symbol-index list 命令。