debuginfod service on Debian
Debian wikiのdebuginfodの記事に対応する内容
どこにダウンロードされるのか?
具体的には、こんな感じ。ビルドIDに対応した、データ(デバック情報?とソースコード?)がある
ls -la ~/.cache/debuginfod_client/
合計 12
drwxr-xr-x 1 yabuki yabuki 1460 7月 31 18:56 .
drwx------ 1 yabuki yabuki 984 8月 2 15:32 ..
drwx------ 1 yabuki yabuki 18 7月 31 18:56 2a0fb93a5bc4342361454ff95d2f7ba431c0fa42
drwx------ 1 yabuki yabuki 18 7月 31 18:56 355b305e021bea4f87bab1a15e048282dc090db1
drwx------ 1 yabuki yabuki 18 7月 31 18:14 46bbc59901196392a294a8c436a884cc71e1cc75
drwx------ 1 yabuki yabuki 18 7月 31 18:55 4c5360dc293af614f83953626f43b5996dcb99a1
drwx------ 1 yabuki yabuki 18 7月 31 18:56 5aa43e3778622f4b95261331e97a45be5b87481d
drwx------ 1 yabuki yabuki 18 7月 31 18:56 612734ba9e42eb4a87f15e845b24a57c99dd9541
drwx------ 1 yabuki yabuki 18 7月 31 18:56 655b5832c8cd64a75acacee796a4ba1056a6a083
drwx------ 1 yabuki yabuki 58 7月 30 00:59 6c8322113f256db15976780e5dee8aa004b21bd5
drwx------ 1 yabuki yabuki 18 7月 31 18:56 8fee861439dcf268ebe3b4434d0151120e330a7e
drwx------ 1 yabuki yabuki 18 7月 31 18:14 9bafb2afe4a66cbece3720f7c47126d74c054ac0
drwx------ 1 yabuki yabuki 18 7月 31 18:55 9fa96bb766a5c54c99e19c7a0a0bb53851ab0860
drwx------ 1 yabuki yabuki 18 7月 31 18:56 b0631d1ab77b5445394c16e5ef47836d3c16d2ed
drwx------ 1 yabuki yabuki 18 7月 31 18:55 b4aa7e0d7555adb6fac9cc410b7d60fc09aa1607
drwx------ 1 yabuki yabuki 18 7月 31 18:56 bb0fa5371874ba431e7cd9dc2df93922de436fa9
drwx------ 1 yabuki yabuki 18 7月 31 18:55 c7cdf8341bb9761930e365dd4e0741812ca804b6
-rw-r--r-- 1 yabuki yabuki 5 7月 31 18:14 cache_clean_interval_s
-rw-r--r-- 1 yabuki yabuki 3 7月 30 01:01 cache_miss_s
drwx------ 1 yabuki yabuki 18 7月 31 18:56 e5420e073b9ebd978422078c73d4d6812ecf53ed
drwx------ 1 yabuki yabuki 18 7月 31 18:56 e83434bccbc337eb727378b60d562a0a2a1aa297
-rw-r--r-- 1 yabuki yabuki 6 7月 30 00:59 max_unused_age_s
debug情報
ls -la ~/.cache/debuginfod_client/2a0fb93a5bc4342361454ff95d2f7ba431c0fa42/
合計 1284
drwx------ 1 yabuki yabuki 18 7月 31 18:56 .
drwxr-xr-x 1 yabuki yabuki 1460 7月 31 18:56 ..
-r-------- 1 yabuki yabuki 1311352 7月 1 05:12 debuginfo
ソースコードらしきもの
/home/yabuki/.cache/debuginfod_client/6c8322113f256db15976780e5dee8aa004b21bd5:
合計 0
drwx------ 1 yabuki yabuki 58 7月 30 00:59 .
drwxr-xr-x 1 yabuki yabuki 1460 7月 31 18:56 ..
-rw-r--r-- 1 yabuki yabuki 0 7月 30 00:59 source##usr##bin##ibus-daemon
# apt-cache search debuginfod
debuginfod - debuginfo-related http file-server daemon
libdebuginfod-common - configuration to enable the Debian debug info server
libdebuginfod-dev - libdebuginfod development libraries and header files
libdebuginfod1 - library to interact with debuginfod (development files)
# apt-file search debuginfod.sh
libdebuginfod-common: /usr/share/libdebuginfod-common/debuginfod.sh
配置されるのは、Debian wikiの記述によると /etc/profile.d/の下とのこと。そこに置かれるってことは、loginしてbash_profileとかを読んだときに有効になると考えて良いのかしら。
root@Orlanth:/home/yabuki# apt install debuginfod elfutils
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libasm1 libdebuginfod-common libdebuginfod1 libmicrohttpd12
以下のパッケージが新たにインストールされます:
debuginfod elfutils libasm1 libdebuginfod-common libdebuginfod1 libmicrohttpd12
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 117 個。
785 kB のアーカイブを取得する必要があります。
この操作後に追加で 3,582 kB のディスク容量が消費されます。
続行しますか? [Y/n]
方式
クライアント・サーバー方式です。ProtocolはHTTP/HTTPS
Server
私の場合は、https://debuginfod.debian.net/ を使うことになるが、他のofficalとの関係はどうなっているの?
Client
Clientの表にあるプログラムで、対応しているものが使えるGDB, lldb, perf, systemtapとかある。
elfutils
apt-cache show elfutils
Package: elfutils
Version: 0.187-1
Installed-Size: 2810
Maintainer: Debian Elfutils Maintainers <debian-gcc@lists.debian.org>
Architecture: amd64
Depends: libasm1 (>= 0.132), libc6 (>= 2.33), libdw1 (= 0.187-1), libelf1 (= 0.187-1), libstdc++6 (>= 4.1.1)
Description-ja: ELF オブジェクト操作用ユーティリティ集
Elfutils はユーティリティ集であり、eu-ld(リンカ)、eu-nm (オブジェクトファイル
からシンボルリストを生成)、eu-size (オブジェクト又はアーカイブファイルの
セクションサイズ一覧を作成)、eu-strip (シンボルを削除)、eu-readelf (ELF ファイル
構造をそのまま表示)、そして eu-elflint (適格な ELF ファイルかどうかをチェック)
が含まれます。
Description-md5: f888bb36a86d79063156ad9a0a117cad
Multi-Arch: foreign
Homepage: https://sourceware.org/elfutils/
Tag: devel::buildtools, devel::testing-qa, interface::commandline,
role::program, scope::utility, use::checking, use::viewing,
works-with::software:source
Section: utils
Priority: optional
Filename: pool/main/e/elfutils/elfutils_0.187-1_amd64.deb
Size: 460288
MD5sum: 173c9411044c816df7e71e8d5d0b4d4a
SHA256: 415af60908bcaf1c493936c06ffd139a4ab688f990a3551a5f79f6f18f5d299a
binutils
# cat /var/lib/dpkg/info/binutils.list | grep \/bin\/
/usr/bin/addr2line
/usr/bin/ar
/usr/bin/as
/usr/bin/c++filt
/usr/bin/dwp
/usr/bin/elfedit
/usr/bin/gold
/usr/bin/gp-archive
/usr/bin/gp-collect-app
/usr/bin/gp-display-html
/usr/bin/gp-display-src
/usr/bin/gp-display-text
/usr/bin/gprof
/usr/bin/gprofng
/usr/bin/ld
/usr/bin/ld.bfd
/usr/bin/ld.gold
/usr/bin/nm
/usr/bin/objcopy
/usr/bin/objdump
/usr/bin/ranlib
/usr/bin/readelf
/usr/bin/size
/usr/bin/strings
/usr/bin/strip
対象
Debianの場合は、リポジトリのmainにあるもの。アーキテクチャは、amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x (2022-07-17時点)
使い方
command -v ibus-daemon
/usr/bin/ibus-daemon
eu-readelf -n /usr/bin/ibus-daemon
オフセット 0x338 の 32 バイトのノートセクション [ 2] '.note.gnu.property':
所有者 データ大きさタイプ
GNU 16 GNU_PROPERTY_TYPE_0
X86 0xc0008002 data: 01 00 00 00
オフセット 0x358 の 36 バイトのノートセクション [ 3] '.note.gnu.build-id':
所有者 データ大きさタイプ
GNU 20 GNU_BUILD_ID
ビルド ID: 6c8322113f256db15976780e5dee8aa004b21bd5
オフセット 0x37c の 32 バイトのノートセクション [ 4] '.note.ABI-tag':
所有者 データ大きさタイプ
GNU 16 GNU_ABI_TAG
OS: Linux, ABI: 3.2.0
shortcut
eu-readelf -n /usr/bin/ibus-daemon | grep ビルド
ビルド ID: 6c8322113f256db15976780e5dee8aa004b21bd5
RHのblogに書いてあるのと異なり、ビルドが日本語なのでgrep対象も日本語に変更している。
取得
debuginfod -U -F /usr/lib/debug/
[2022年07月29日 16時03分41秒] (3199742/3199742): opened database /home/yabuki/.debuginfod.sqlite rw ro
[2022年07月29日 16時03分41秒] (3199742/3199742): sqlite version 3.39.2
[2022年07月29日 16時03分41秒] (3199742/3199742): service mode active
[2022年07月29日 16時03分41秒] (3199742/3199742): started http server on IPv4 IPv6 port=8002
[2022年07月29日 16時03分41秒] (3199742/3199742): search concurrency 16
[2022年07月29日 16時03分41秒] (3199742/3199742): webapi connection pool 0 (unlimited)
[2022年07月29日 16時03分41秒] (3199742/3199742): rescan time 300
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache fds 160
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache mbs 222796
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache prefetch 64
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache tmpdir /tmp
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache tmpdir min% 25
[2022年07月29日 16時03分41秒] (3199742/3199742): groom time 86400
[2022年07月29日 16時03分41秒] (3199742/3199742): prefetch fds 0
[2022年07月29日 16時03分41秒] (3199742/3199742): prefetch mbs 0
[2022年07月29日 16時03分41秒] (3199742/3199742): forwarded ttl limit 8
[2022年07月29日 16時03分41秒] (3199742/3199742): accepting archive types .ddeb((bsdtar -O -x -f - data.tar\*)<) .deb((bsdtar -O -x -f - data.tar\*)<) .ipk((bsdtar -O -x -f - data.tar\*)<)
[2022年07月29日 16時03分41秒] (3199742/3199742): upstream debuginfod servers: https://debuginfod.debian.net
[2022年07月29日 16時03分42秒] (3199742/3199744): grooming database
[2022年07月29日 16時03分42秒] (3199742/3199745): fts traversed source paths in 0.000256602s, scanned=11, regex-skipped=0
[2022年07月29日 16時03分42秒] (3199742/3199744): database record counts:
[2022年07月29日 16時03分42秒] (3199742/3199744): file d/e 0
[2022年07月29日 16時03分42秒] (3199742/3199744): file s 0
[2022年07月29日 16時03分42秒] (3199742/3199744): archive d/e 0
[2022年07月29日 16時03分42秒] (3199742/3199744): archive sref 0
[2022年07月29日 16時03分42秒] (3199742/3199744): archive sdef 0
[2022年07月29日 16時03分42秒] (3199742/3199744): buildids 0
[2022年07月29日 16時03分42秒] (3199742/3199744): filenames 0
[2022年07月29日 16時03分42秒] (3199742/3199744): files scanned (#) 0
[2022年07月29日 16時03分42秒] (3199742/3199744): files scanned (mb) 0
[2022年07月29日 16時03分42秒] (3199742/3199744): index db size (mb) 0
[2022年07月29日 16時03分42秒] (3199742/3199744): groomed database in 0.0014815s
たぶん ここのdebuginfod -F オプションと-Uオプションの使い方で何を指定するのかが
わかってないのがソースコードをちゃんと取れない原因な気がする。
gdb
debuginfodが適切に設定されていれば、GDBから下記のような設定ができるようだ。
Debuginfod Settings (Debugging with GDB)
K.1 Debuginfod Settings
GDB provides the following commands for configuring debuginfod.
set debuginfod enabled
set debuginfod enabled on
GDB will attempt to query debuginfod servers when missing debug info or source files.
set debuginfod enabled off
GDB will not attempt to query debuginfod servers when missing debug info or source files. By default, debuginfod enabled is set to off for non-interactive sessions.
set debuginfod enabled ask
GDB will prompt the user to enable or disable debuginfod before attempting to perform the next query. By default, debuginfod enabled is set to ask for interactive sessions.
show debuginfod enabled
Display whether debuginfod enabled is set to on, off or ask.
set debuginfod urls
set debuginfod urls urls
Set the space-separated list of URLs that debuginfod will attempt to query. Only http://, https:// and file:// protocols should be used. The default value of debuginfod urls is copied from the DEBUGINFOD_URLS environment variable.
show debuginfod urls
Display the list of URLs that debuginfod will attempt to query.
set debuginfod verbose
set debuginfod verbose n
Enable or disable debuginfod-related output. Use a non-zero value to enable and 0 to disable. debuginfod output is shown by default.
show debuginfod verbose
Show the current verbosity setting.
start with gdb
gdb -args /usr/bin/ibus -xrd
GNU gdb (Debian 12.1-3) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/ibus...
This GDB supports auto-downloading debuginfo from the following URLs:
https://debuginfod.debian.net
Enable debuginfod for this session? (y or [n]) y
Debuginfod has been enabled.
To make this setting permanent, add 'set debuginfod enabled on' to .gdbinit.
Downloading 0.05 MB separate debug info for /usr/bin/ibus
Reading symbols from /home/yabuki/.cache/debuginfod_client/9bafb2afe4a66cbece3720f7c47126d74c054ac0/debuginfo...
Downloading 0.06 MB separate debug info for /home/yabuki/.cache/debuginfod_client/9bafb2afe4a66cbece3720f7c47126d74c054ac0/debuginfo
(gdb)
(gdb) list
Download failed: 無効な引数です. Continuing without source file ./tools/./tools/main.c.
2417 ./tools/main.c: そのようなファイルやディレクトリはありません.
download and ignore command line option
(gdb) run
Starting program: /usr/bin/ibus -xrd
Downloading 0.03 MB separate debug info for system-supplied DSO at 0x7ffff7fca000
Downloading 2.57 MB separate debug info for /lib/x86_64-linux-gnu/libgio-2.0.so.0
Downloading 0.46 MB separate debug info for /lib/x86_64-linux-gnu/libgobject-2.0.so.0
Downloading 0.03 MB separate debug info for /home/yabuki/.cache/debuginfod_client/b4aa7e0d7555adb6fac9cc410b7d60fc09aa1607/debuginfo
Downloading 1.25 MB separate debug info for /lib/x86_64-linux-gnu/libglib-2.0.so.0
Downloading 0.46 MB separate debug info for /lib/x86_64-linux-gnu/libibus-1.0.so.5
Downloading 0.02 MB separate debug info for /lib/x86_64-linux-gnu/libgmodule-2.0.so.0
Downloading 0.10 MB separate debug info for /lib/x86_64-linux-gnu/libz.so.1
Downloading 0.23 MB separate debug info for /lib/x86_64-linux-gnu/libselinux.so.1
Downloading 0.06 MB separate debug info for /lib/x86_64-linux-gnu/libffi.so.8
Downloading 0.46 MB separate debug info for /lib/x86_64-linux-gnu/libpcre.so.3
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Downloading 0.62 MB separate debug info for /lib/x86_64-linux-gnu/libpcre2-8.so.0
-xrd は不明なコマンドです。
使い方: ibus コマンド [オプション...]
コマンド:
engine エンジンを設定もしくは表示する
exit ibus-daemon を終了する
list-engine 利用可能なエンジンを表示する
watch (実装されていません)
restart ibus-daemon を再起動する
version バージョンを表示する
read-cache レジストリーキャッシュの内容を表示する
write-cache レジストリーキャッシュを作成する
address ibus-daemon の D-Bus アドレスを表示する
read-config 設定値を表示する
reset-config 設定値を初期化する
emoji ダイアログ上の絵文字をクリップボードに保存する
help この情報を表示する
[Inferior 1 (process 318931) exited with code 01]
(gdb)