Zxdb 应根据您的环境自动设置符号设置。
本部分介绍了 zxdb 如何加载符号。如果您想了解如何排查 zxdb 符号化程序的常见问题,请参阅诊断符号问题。
build ID
Zxdb 使用二进制文件的build ID 在目标设备上定位二进制文件的符号。
例如,如需在 Linux 上查看二进制文件的 build ID,请转储 ELF 二进制文件的 notes
:
$ 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 以及当前已加载到附加进程中的库。它还会显示相应的符号文件(如果找到)。
符号服务器
Zxdb 可以从 Google 服务器或上游 debuginfod
服务器加载预构建库的符号。这是为 SDK 用户分发任何非本地构建内容的机制。如需了解详情,请参阅下载符号。
使用大型二进制文件时,符号可能有几个 GB,因此下载过程可能需要一些时间(通常几分钟左右)。下载符号时,sym-stat
命令会显示 Downloading...
。
zxdb 下载符号后,会将其存储在符号缓存中。symbol-cache
设置包含此目录的名称。
例如:
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 实例
set build-id-dirs += /home/alice/project/out/x64/.build-id
ffx
ffx debug symbol-index add out/default/.build-id
然后,sym-stat
的输出中会为这些目录添加 (folder)
注解,而不是目录中包含的二进制文件的数量。这些二进制文件不会显示在 sym-stat --dump-index
输出中,因为 zxdb 在搜索符号时会按需搜索这些目录,而不是预先枚举这些目录。
单个文件和目录
如果您只有一个二进制文件,且该文件不采用任何其他符号数据库格式,则可以为该特定文件配置 zxdb。您可以将特定文件添加到路径列表中,以便为该文件配置 symbol-paths
。
例如,如需将 /home/alice/project/a.out
添加到 symbol-paths
设置,请使用以下代码:
文件
set symbol-paths += /home/alice/project/a.out
目录
set symbol-paths += /home/me/project/build/
您可以使用 sym-stat
命令查看您配置的位置的状态。例如:
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
设置,请使用以下代码:
set ids-txts += /home/alice/project/build/ids.txt
运行 sym-stat
或 sym-stat --dump-index
命令时,系统还会显示 ids.txt
文件中的符号文件。
符号设置
您的环境会自动应用了解 Zxdb 如何加载符号部分中所述的设置。本部分介绍了如何设置这些设置。
symbol-index-files
设置包含一个或多个由开发环境设置的 JSON 格式文件:
get symbol-index-files
symbol-index-files =
• /home/alice/.fuchsia/debug/symbol-index.json
此文件可以包含一些全局设置,并引用其他 symbol-index
文件。通常,您当前使用的每个构建环境都有一个从此全局文件引用的类似文件。
如果您在构建环境之间切换,并发现符号无法加载,请确保您的环境已使用 ffx debug symbol-index list
命令注册。