はじめに
本稿では、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 なので、その点は注意です(具体的なコマンドは併せて載せています)。
デバッグシンボルの取得方法
主な流れは次のとおりです。
- デバッグしたいコマンドのパッケージ名を確認
- デバッグしたいパッケージのデバッグシンボルをインストール
事前準備
はじめに必要なコマンドのパッケージをインストールします。
// 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 はご使用の環境により変化します。
デバッグシンボル取得手順
事前準備で確認したパッケージのデバッグシンボルをインストールします。
// 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