■ はじめに
本稿では、RHEL、CentOS、Fedora といった RedHat 系 Linux のコマンドをデバッグする方法を記載しています。
一例として、free
のパッケージである procps-ng
のデバッグシンボルを取得し、デバッグを開始するまで行います。
■ 検証環境
[root@hst ~]# uname -r
4.18.11-200.fc28.x86_64
[root@hst ~]# cat /etc/fedora-release
Fedora release 28 (Twenty Eight)
上記のとおり、検証環境は Fedora ですが、以降の手順は RHEL や CentOS でも使えるはずです。ただし、RHEL, CentOS, Fedora(21以前)の標準のパッケージマネージャは dnf ではなく yum なので、その点は注意です(具体的なコマンドは併せて載せています)。
■ デバッグシンボルの取得方法
主な流れは次のとおりです。
- デバッグしたいコマンドのパッケージ名を確認
- デバッグしたいパッケージのデバッグシンボルをインストール
1. 事前準備
はじめに必要なコマンドのパッケージをインストールします。
// Fedora(22以降)の場合
なし
// RHEL, CentOS, Fedora(21以前)の場合
[root@hst ~]# yum install yum-utils
次にデバッグしたいコマンドのパッケージ名を確認します(本稿では free コマンドが対象)。
[root@hst ~]# rpm -qf $(which --skip-alias free)
procps-ng-3.3.12-3.fc28.x86_64
※ .fc28.x86_64 はご使用の環境により変化します。
2. デバッグシンボル取得手順
事前準備で確認したパッケージのデバッグシンボルをインストールします。
// Fedora(22以降)の場合
[root@hst ~]# dnf debuginfo-install procps-ng-3.3.12-3.fc28.x86_64
// RHEL, CentOS, Fedora(21以前)の場合
[root@hst ~]# debuginfo-install procps-ng-x.x.xx-x.xxx
コマンドを実行すると次のように <pkg>-debuginfo と <pkg>-debugsource をインストールしようとします。
Dependencies resolved.
===================================================================================================================================================================================================================
Package Arch Version Repository Size
===================================================================================================================================================================================================================
Installing:
procps-ng-debuginfo x86_64 3.3.12-3.fc28 updates-debuginfo 382 k
Installing weak dependencies:
procps-ng-debugsource x86_64 3.3.12-3.fc28 updates-debuginfo 229 k
Transaction Summary
===================================================================================================================================================================================================================
Install 2 Packages
Total download size: 611 k
Installed size: 2.3 M
Is this ok [y/N]: y
念のためデバッグシンボルが読み込まれるか確認します。
[root@hst ~]# gdb -q free
Reading symbols from free...Reading symbols from /usr/lib/debug/usr/bin/free-3.3.12-3.fc28.x86_64.debug...done.
done.
上記のように表示されていれば、そのままデバッグできるはずです。もし、(no debugging symbols found)...done. と表示されている(デバッグシンボルが読み込まれていない)場合は、次のコマンドを実行し、パッケージがインストールされているかご確認ください。
[root@hst ~]# rpm -qa | grep procps-ng
procps-ng-debugsource-3.3.12-3.fc28.x86_64
procps-ng-debuginfo-3.3.12-3.fc28.x86_64
procps-ng-3.3.12-3.fc28.x86_64
以上です。