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-stat
或 sym-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
命令。