Debuginfod

来自 Arch Linux 中文维基

Debuginfod 是一种通过 HTTP API 提供 debug 信息的服务。

安装[编辑 | 编辑源代码]

gdb 会自动尝试从 DEBUGINFOD_URLS 环境变量中指定的服务器下载调试文件(debug files),该变量是一串以空格分隔的 URL。

libelfgdb 的依赖项,附带了 /etc/profile.d/debuginfod.sh/etc/profile.d/debuginfod.csh 脚本,这些脚本在登录时设置变量,因此无需安装额外的软件包。这些脚本解析 /etc/debuginfod/ 中的 .urls 文件,并将 DEBUGINFOD_URLS 环境变量默认设置为 https://debuginfod.archlinux.org

提示:还可以使用 https://debuginfod.elfutils.org/ 作为联合服务器并查询所有可用的 debuginfod 服务器。

您可以选择性安装提供 debuginfod-find(1) 实用程序的 debuginfod 软件包,此包是 delve 中的 debuginfod 支持所必需的。

使用[编辑 | 编辑源代码]

提示:关于 debuginfod 配合 gdb 一起使用,参考 Debugging/Getting traces#Getting the trace

手动下载[编辑 | 编辑源代码]

如果要手动检索 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 Crash Report 支持
valgrind 支持

缓存[编辑 | 编辑源代码]

debuginfod 的缓存存储在 $DEBUGINFOD_CACHE_PATH (如果已设置)指定的位置。否则,如果设置了 $XDG_CACHE_HOME,它将使用 $HOME/.cache/debuginfod_client/$XDG_CACHE_HOME/debuginfod_client/。缓存的大小可能增长得非常快,具体取决于您拥有的调试会话数量以及涉及的软件包。

有 3 个参数可以配置缓存行为,如 debuginfod(8) § CACHE 手册中的描述:

  • cache_clean_interval_s: 每次自动清理之间的间隔(默认为 86400,即 1 天)
  • max_unused_age_s: 未使用的数据保留多长时间(默认为 604800,即 1 周)
  • cache_miss_s: 记住失败的查询多长时间(默认为 600,即 10 分钟)

每个参数都由缓存文件夹中同名文件中的数字定义。

如果你很少使用 debuginfod,可以手动删除缓存中的所有目录(保留参数文件)或完整的缓存目录。

参见[编辑 | 编辑源代码]