跳转至内容

Debuginfod

来自 ArchWiki

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 支持时,需要安装此包。

用法

提示 有关与 gdb 一起使用的说明,请参见 Debugging/Getting traces#Getting the trace

手动下载

如果您想手动检索 zstd 的调试符号以及一些源代码文件,可以使用 debuginfod-find

$ debuginfod-find debuginfo /usr/bin/zstd
/home/user/.cache/debuginfod_client/70e1b456c5813658df6436a3deb71812e75a0267/debuginfo
$ eu-srcfiles -e /usr/bin/zstd
...
/usr/src/debug/zstd-1.5.2/programs/fileio.c
...
$ 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 来查找调试符号和源代码列表。

软件包 (Package) 状态 备注
gdb 支持情况
delve 支持情况
KDE 崩溃报告 支持情况
valgrind 支持情况
AddressSanitizer 不支持 如果错误发生在外部库中(例如,双重释放或无效释放),AddressSanitizer 无法获取单独的调试符号并将其用于回溯。

缓存

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

有 3 个参数可以配置缓存行为,如 debuginfod(8) § CACHE 的 man 页所述:

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

每个参数都在缓存文件夹中具有相同名称的文件中定义了一个数字。

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

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.