Debuginfod
Debuginfod 是一项通过 HTTP API 提供调试信息的服务。
安装
gdb 会自动尝试从 DEBUGINFOD_URLS
环境变量 中指定的服务器下载调试文件,该变量是一个以空格分隔的 URL 字符串。
libelf,gdb 的一个依赖项,附带 /etc/profile.d/debuginfod.sh
和 /etc/profile.d/debuginfod.csh
脚本,这些脚本在登录时设置该变量,因此无需安装额外的软件包。这些脚本解析 /etc/debuginfod/
中的 .urls 文件,并将环境变量默认设置为 https://debuginfod.archlinux.org
。
https://debuginfod.elfutils.org/
,它作为一个联邦服务器,会查询所有可用的 debuginfod 服务器。您可以选择安装 debuginfod 软件包,它提供了 debuginfod-find(1) 实用程序。对于 delve 中的 debuginfod 支持,此软件包是必需的。
用法
手动下载
如果想要手动检索 zstd 的调试符号,以及一些源文件,可以使用 debuginfod-find
$ debuginfod-find debuginfo /usr/bin/zstd
/home/user/.cache/debuginfod_client/70e1b456c5813658df6436a3deb71812e75a0267/debuginfo
$ debuginfod-find source /usr/bin/zstd /usr/src/debug/zstd-1.5.2/programs/fileio.c
/home/user/.cache/debuginfod_client/70e1b456c5813658df6436a3deb71812e75a0267/source##usr##src##debug##zstd-1.5.2##programs##fileio.c
禁用
可以通过清除 DEBUGINFOD_URLS
来禁用 debuginfod 客户端服务
$ unset DEBUGINFOD_URLS
如果想要使用本地缓存,而不尝试连接任何服务器,可以将 DEBUGINFOD_URLS
设置为一个非空字符串,例如 /dev/null
。
调试器支持
一些调试器支持使用 debuginfod 来查找调试符号和源代码列表。
软件包 | 状态 | 备注 |
---|---|---|
gdb | 支持 | |
delve | 支持 | |
KDE 崩溃报告 | 支持 | |
valgrind | 支持 | |
AddressSanitizer | 不支持 | 如果错误发生在外部库中(例如,双重释放或无效的 free 使用),AddressSanitizer 无法获取单独的调试符号并将其用于其回溯。 |
缓存
debuginfod 的缓存存储在 $DEBUGINFOD_CACHE_PATH
指定的位置(如果已设置)。否则,它将使用 $HOME/.cache/debuginfod_client/
或 $XDG_CACHE_HOME/debuginfod_client/
(如果已设置 $XDG_CACHE_HOME
)。缓存大小可能会增长很快,具体取决于您的调试会话数量以及涉及的软件包。
有 3 个参数配置缓存行为,如 debuginfod(8) § CACHE 的手册页中所述
cache_clean_interval_s
:每次自动清理之间的间隔(默认为 86400,即 1 天)max_unused_age_s
:未使用的数据保留多长时间(默认为 604800,即一周)cache_miss_s
:记住失败查询的时间(默认为 600,即 10 分钟)
每个参数都由缓存文件夹中同名文件中的数字定义。
如果您很少使用 debuginfod,可以手动删除缓存中的所有目录(保留参数文件),或完全删除缓存目录。