Debian 9: デバッグシンボルのdbgsymでパッケージをデバッグする

デバッグシンボルのdbgsymでパッケージをデバッグする手順を記載します。

1 debian-debugリポジトリを追加する

debigan-debugリポジトリを追加します。

$ cat <<EOF | sudo tee /etc/apt/sources.list.d/dbgsym.list
deb http://debug.mirrors.debian.org/debian-debug/ stretch-debug main
EOF
$ sudo apt update -y

2 dbgsymをインストールする

dbgsymというサフィックスが付いているパッケージがデバッグシンボルです。

<pkg>-dbgsym

この記事ではcoreutilsのデバッグシンボルをインストールします。

$ sudo apt install -y coreutils-dbgsym

デバッグシンボルは/usr/lib/debugに格納されます。GDBは/usr/lib/debugを自動的に走査します。

$ dpkg -L coreutils-dbgsym
/.
/usr
/usr/lib
/usr/lib/debug
/usr/lib/debug/.build-id
/usr/lib/debug/.build-id/04
/usr/lib/debug/.build-id/04/7a2dfd63f9e20b837c04e874b56b47b60f564a.debug
/usr/lib/debug/.build-id/09
/usr/lib/debug/.build-id/09/16ef8fc767ab302f1468c5c515929f313b9e54.debug
/usr/lib/debug/.build-id/0a
<snip>

3 パッケージをデバッグする

GDBをインストールします。

$ sudo apt install -y gdb

coreutilsのソースコードをインストールします。

$ mkdir coreutils
$ cd coreutils
$ apt source coreutils-dbgsym
$ cd ./coreutils-*

GDBでcoreutilsのlsコマンドをデバッグします。

$ gdb ls
(gdb) la src
(gdb) b main
(gdb) r

main関数でブレークしました。

0001_dbgsym.png