my_knowledge.ko

Linux | Debug, Analyze, Trace | Tech | etc...

【RHEL, CentOS, Fedora】Linux コマンドのデバッグ方法

はじめに

本稿では、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