デバッガは、プログラムのバグを見つけるために不可欠なものだ。デバッガは、コンパイルする前にコードの問題点を見つけようとする足跡を残し、通常はコンパイラそのものよりも多くの情報を提供してくれる。Linuxは主にオープンソースのエコシステムであるため、いくつかの異なる言語や処理アーキテクチャで動作する、この種のアプリケーションが数多く存在する。このガイドでは、Linuxデバッガーの世界に直行しよう。
1.GNUデバッガ(GDB)
GNUデバッガー、別名GDBは、現代のプログラマーが利用できる最も強力なLinuxデバッガーの1つです。豊富な機能を備えた堅牢なツールである。GDBは、C、C++、Go、Rustなど、多くの一般的なプログラミング言語をサポートしている。また、x86、x86-64、ARM、PowerPC、SPARC、MIPSなど、さまざまなCPUアーキテクチャで動作する。
以下のコマンドを使ってGDBをインストールする:
Ubuntu/Debianベースのディストロの場合:sudo apt install gdb
Fedora/RHELディストロの場合:
sudo dnf install gdb
Arch ベースのディストロでは
sudopacman-S gdb
デバッグ・シンボル付きのGCCを使ってコンパイルしている限り、sをタイプすれば、プログラムの実行中にその命令をステップ実行できる。プログラムがロードされた状態でGDBを起動するには、ターミナルでgdbと
入力し、その後にプログラムのパスを入力します。
いったん入ったら、helpと
入力すると、この強力なデバッガでできることをすべて説明した、よく整理されたカタログが表示されます!
2.データ表示デバッガ (DDD)
コマンドをいじるのは苦手だけど、GDBが提供する機能は大好きという場合、DDDはシンプルなグラフィカルフロントエンドを提供し、ポイント&クリックのインターフェースですべての機能を提供します。これはLinuxデバッガGUIの真髄だ。
UIは少し素っ気なく見えるかもしれないが、他のデバッガーと同じくらいパワフルだ。ここでの違いは、GNUの代表的なデバッガをグラフィカル・インターフェースで利用できることだ!
インストールするには Ubuntu/Debianベースのディストロの場合:sudo apt install ddd
Fedora/RHELディストロの場合:
sudo dnf install ddd
Archベースのディストロでは
yay-S ddd
DDD は公式リポジトリに存在しないので、Arch ベースのものは AUR ヘルパーを使う必要があります。代わりに、AUR ヘルパーなしで Arch ベースのシステムに DDD をインストールすることもできます:
sudopacman-S --neededbase-develgit clone https://aur.archlinux.org/ddd.gitcd dddmakepkg-si
3.LLDB
LLDBは LLVM プロジェクトの一部です。LLVMスイートは、その効率的なワークフローのおかげで人気を集めている。また、macOSのXcodeやAndroid Studioのデフォルト・デバッガーにもなっている。LLDBの主な機能には、様々なコンパイラー統合やリモート・デバッグのサポートがある。C言語(C、C++、Objective-C)をサポートしている。
すでに基本的なGDBコマンドに慣れている人にとっては、LLDBは馴染みのあるものだろう。run
またはrと
入力するとプログラムが実行され、step
またはsと
入力するとサブルーチンが実行される。
sudo apt installlldb
Fedora/RHEL系ディストロの場合:
sudo dnf installlldb
Archベースのディストロでは
sudopacman-Slldb
4.Delve
Delveはシンプルで機能が豊富な、Google の Go プログラミング言語用の Linux デバッガーです。実行時にプログラムを操作したり、ゴルーチンやスタックなどを操作するのに使えます。デバッガー自体はGoで書かれているため、テストしているプログラムと同じ環境でのランタイムを提供する。
DelveはGDBやLLDBと同じ原理で動作するが、他の2つとは大きく異なる独自のコマンドセットがある。helpと
入力すれば、デバッグ・オプションの全リストが表示される。
インストール方法
Ubuntu/Debianベースのディストロの場合:sudo apt installdelve
Fedora/RHELディストロの場合:
sudo dnf installdelve
Arch ベースのディストロでは
sudopacman-Sdelve
5.Xdebug
ほとんどの人は変数のダンプ (PHP コミュニティでは "dump & die" と呼ばれています) を学んでコードのある部分に問題があることを突き止めます。Xdebugは、PHPプログラマー志望者やベテランプログラマーにこれを提供します。
XdebugはLinuxのデバッガで、PHPのコードを一行ずつ走査し、Webページが処理されるときに何が起こっているかを正確に表示します。Xdebugは、VSCodeを含むいくつかのIDEでも動作します。その他の機能として、強力なプロファイラ、スタックトレーサ、実行セグメントを完全にダンプする機能などがあります。
Xdebugをインストールするには Ubuntu/Debianベースのディストロの場合:sudo apt installphp-xdebug
Fedora/RHEL 系ディストロの場合:
sudo dnf installphp-xdebug
Arch ベースのディストロでは
sudopacman-Sxdebug
6.KDbg
KDbgはKDE デスクトップ環境用の GUI デバッガです。DDD のように GDB フロントエンドとして動作するので、直感的なユーザーインターフェイスと一緒に GDB の全ての機能が得られます。より経験豊富なプログラマーは、コードをステップスルーしながらすべての変数をクリアに見ることができ、各CPUレジスタが何を保持しているかを示す完全な専用パネルがあることに感謝するだろう。ここで取り上げた他のデバッガでは、このような視覚化はほとんど容易ではない。
このため、KDbgは、学習を始めたばかりのオタマジャクシから、熟練したベテランまで、従来のネイティブ・アプリケーション・プログラマーにとって素晴らしい選択肢です。KDbgをインストールするには
Ubuntu/Debianベースのディストロの場合:sudo apt installkdbg
Fedora/RHELディストロの場合:
sudo dnf installkdbg
Archベースのディストロの場合
sudopacman-Skdbg
Note: UbuntuやDebianベースのディストロを使っていて、公式リポジトリにkdbgのパッケージが見つからない場合、自分でビルドするために入力する内容は以下の通り:
sudo apt installbuild-essential cmake extra-cmake-modules qtbase5-dev libkf5i18n-dev libkf5iconthemes-dev libkf5xmlgui-devgit clone -bmaint https://github.com/j6t/kdbg.gitcdkdbg cmake .makesudo make install
7.Valgrind
Valgrindは揺るぎないメモリデバッガーであり、ソフトウェア解析のための多くの追加ツールを提供します。LinuxでもMacでも動作する。さらに、フレームワークとして使用し、プロファイラのような動的解析ツールを作成することもできる。全体的に、Valgrindは、その豊富な機能セットと、プログラムの実行中にメモリを監視する様々なツールにより、専門家にとって優れた選択肢である。
Valgrindをインストールするには
Ubuntu/Debianベースのディストロの場合:sudo apt install valgrind
Fedora/RHELディストロの場合:
sudo dnf install valgrind
Arch系ディストロの場合
sudopacman-S valgrind
8. strace
straceは Unix 用のユーザー空間ユーティリティで、ターミナルから直接システムコールやシグナルをトレースできます。
プログラマーは、スタックトレースのダンプ、システムコールのフィルタリング、リターンコードの変更、ファイルディスクリプタの抽出などに使うことができる。
さらに重要なのは、straceを使えば実行中のプログラムにアタッチできるということだ。これによって、あなたのマシンで実行されているあらゆるソフトウェアの爪の下を潜り抜け、クラッシュの原因となっている可能性のあるものについて詳しく知ることができる。 straceをインストールするには Ubuntu/Debianベースのディストロの場合:sudo apt install strace
Fedora/RHEL系ディストロの場合:
sudo dnf install strace
Arch系ディストロの場合
sudopacman-S strace
アーセナルが待っている
これらのツールを使えば、以前は近寄りがたいと感じていたような方法で、コードをつつき、突き、分析することができる。学習には少し時間がかかるかもしれないが、その価値は十分にある。Linuxでのプログラミングを真剣に考えているのなら、デバッガの使い方を学ぶことは、長期的にはずっと時間の節約になるだろう。
最高のLinuxデバッガーを手に入れた今、開発者やプログラマーにとって最高のLinuxディストロを見つける時が来た。
画像クレジット:すべての画像は著者によるものです。