Ubuntu 20.04: デバッグシンボルでパッケージをデバッグする

dbgsymパッケージを導入してパッケージをGDBでデバッグします。

1 dbgsymパッケージ用リポジトリの追加

#!/bin/sh -e

U=http://ddebs.ubuntu.com
C=$(lsb_release -cs)

cat <<EOF | sudo tee /etc/apt/sources.list.d/ddebs.list
deb ${U} ${C} main restricted universe multiverse
#deb ${U} ${C}-security main restricted universe multiverse
deb ${U} ${C}-updates main restricted universe multiverse
deb ${U} ${C}-proposed main restricted universe multiverse
EOF

wget -O - http://ddebs.ubuntu.com/dbgsym-release-key.asc | \
    sudo apt-key add -

sudo apt update -y

2 例としてbashをデバッグする

<pkgname>-dbgsymをインストールする。

$ sudo apt install -y bash-dbgsym

こちらの手順でソースコードをダウンロードする。

$ mkdir bash
$ cd bash
$ apt source bash

GDBをインストールして、実行する。

$ sudo apt install -y gdb

directoryコマンドでソースツリーのトップディレクトリを指定できる。

(gdb) directory bash-5.0
Source directories searched: /home/hiroom2/bash/bash-5.0:$cdir:$cwd
(gdb) b main
Breakpoint 1 at 0x2ebd0: file .././shell.c, line 364.
(gdb) r
Starting program: /usr/bin/bash

Breakpoint 1, main (argc=1, argv=0x7fffffffe188, env=0x7fffffffe198) at
.././shell.c:364
364     {

GDB単体でデバッグする場合はla srcコマンドがソースコードを追跡しやすい。

0001_GDB-la-src.png