GNUデバッガ
開発元 | GNU Project |
---|---|
最新版 | |
リポジトリ | |
種別 | デバッガ |
ライセンス | GPL |
公式サイト | gnu.org/software/gdb/ |
GNUデバッガ(単にGDBとも)は、GNUソフトウェア・システムで動く標準のデバッガである。 これは、多くのUnix風システムで動作可能な移植性の高いデバッガであり、Ada、C言語、C++、FORTRAN、FreeBASICといったプログラミング言語に対応している。
歴史
GDBは初め、GNU Emacs が「そこそこ安定化 [1]」した後、1986年 にGNU システムの一部として リチャード・ストールマン が書いた。GDBは、GNU General Public License (GPL) の下でリリースしている フリーソフトウェア である。これは、バークレーUnix の配布物件についてくる Dbx デバッガ をモデルにしている。
ジョン・ギルモア が シグナスソリューションズ に勤務していた 1990年 から 1993年 まで保守をしていた。
技術詳細
機能
GDBは、コンピュータ・プログラム の実行の変更や追跡といった充実した機能を提供する。プログラム内部の 変数 (プログラミング)変数 の値を修正したり、監視したりすることや、プログラムの通常の動作とは別に 関数 を呼び出すことができる。
2003年 現在、GDBのターゲット・プロセッサは、以下のとおりである。
- Alpha
- ARM
- H8/300
- System/370 / System 390
- x86 / x86-64
- IA-64「Itanium」
- Motorola 68000
- MIPS
- PA-RISC
- PowerPC
- SuperH
- SPARC
- VAX
標準リリースでサポートされている、さほど有名でないターゲット・プロセッサには、以下がある。
- AMD 29000
- ARC
- AVR
- CRIS
- D10V / D30V
- FR-30 / FR-V
- Intel i960
- M32R
- 68HC11
- Motorola 88000
- MCORE
- MN10200 / MN10300
- NS32K
- Stormy16
- V850
- Z8000
M32RやV850といった、日本製のCPUにもコンパイル時の組込みシミュレータがある。
遠隔デバッグ
GDBには「遠隔」モードがあり、しばしば組込みシステムのデバッグで使われる。遠隔操作では、GDBとデバッグ対象のプログラムは別のマシンで動作する。GDBは、GDBプロトコルをシリアルやTCP/IP経由で理解する遠隔「スタブ」と通信することができる。
gdbを使い、動いている Linuxカーネル をソース・レベルでデバッグするKGDBでも、同じモードを使っている。kgdbを使い、カーネル開発者は、アプリケーション・プログラムのようにカーネルをデバッグできる。カーネル・コードにブレークポイントを設定でき、ステップ動作ができ、変数を参照できる。ハードウェアのデバッグ・レジスタ (debugging register) が使えるアーキテクチャーでは、ウォッチポイントが設定できる。ウォッチポイントとは、特定のメモリー・アドレスを実行したり、アクセスしたときのブレークポイントをかけるものである。kgdbには、シリアル・ケーブル や イーサネット を使ってデバッグ対象マシンに繋がったマシンが必要となる。FreeBSD では、FireWire DMA を使ったデバッグもできる。
特徴
このデバッガは、グラフィカル・ユーザー・インターフェース がなく、コマンドラインインターフェース である。DDD、Eclipse CDT、GDBtk/Insight、GNU Emacs の「GUDモード」といったフロントエンドがある。 これらは、統合開発環境 のデバッガ同様の機能を備えている。
メモリリーク 検出といった、若干のデバッグ用ツールがGDBとともに働くように設計している。
コマンド例
gdb prog.out debug prog.out gdb > run run
セッション例
次は、プログラムの スタック・トレース をとるGDBセッションの例である。
GNU gdb Red Hat Linux (6.3.0.0-1.21rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /home/sam/programming/crash Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xc11000 This program will demonstrate gdb Program received signal SIGSEGV, Segmentation fault. 0x08048428 in function_2 (x=24) at crash.c:22 22 return *y; (gdb) edit (gdb) shell gcc crash.c -o crash -gstabs+ (gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) y warning: cannot close "shared object read from target memory": File in wrong format `/home/sam/programming/crash' has changed; re-reading symbols. Starting program: /home/sam/programming/crash Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xa3e000 This program will demonstrate gdb 24 Program exited normally. (gdb) quit
プログラムを動かすと、セグメント違反の原因を見つけた後、正しく振る舞うようプログラムを編集する。訂正したプログラムが、GCC で再コンパイルした後に動作する。
参考文献
- Richard M. Stallman, Roland Pesch, Stan Shebs, et al., Debugging with GDB (Free Software Foundation, 2002) ISBN 1-882114-88-4