GNUデバッガ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
GNUデバッガ
開発元 GNU Project
最新版 7.7.1 / 2014年5月5日
種別 デバッガ
ライセンス GPL
公式サイト gnu.org/software/gdb/
テンプレートを表示

GNUデバッガ(単にGDBとも)は、GNUソフトウェア・システムで動く標準のデバッガである。 これは、多くのUnix系システムで動作可能な移植性の高いデバッガであり、AdaC言語C++FORTRANFreeBASICといったプログラミング言語に対応している。

歴史[編集]

GDBは初め、GNU Emacs が「そこそこ安定化 [1]」した後、1986年GNU システムの一部として リチャード・ストールマン が書いた。GDBは、GNU General Public License (GPL) の下でリリースしている フリーソフトウェア である。これは、バークレーUnixの配布物件についてくるDbx デバッガをモデルにしている。

ジョン・ギルモアシグナスソリューションズ に勤務していた 1990年から1993年まで保守をしていた。

技術詳細[編集]

機能[編集]

GDBは、プログラムの実行の変更や追跡といった充実した機能を提供する。プログラム内部の 変数 の値を修正したり、監視したりすることや、プログラムの通常の動作とは別に 関数 を呼び出すことができる。

2003年 現在、GDBのターゲット・プロセッサは、以下のとおりである。

標準リリースでサポートされている、さほど有名でないターゲット・プロセッサには、以下がある。

M32RやV850といった、日本製のCPUにもコンパイル時の組込みシミュレータがある。

遠隔デバッグ[編集]

GDBには「遠隔」モードがあり、しばしば組込みシステムのデバッグで使われる。遠隔操作では、GDBとデバッグ対象のプログラムは別のマシンで動作する。GDBは、GDBプロトコルをシリアルやTCP/IP経由で理解する遠隔「スタブ」と通信することができる。

gdbを使い、動いているLinuxカーネルをソース・レベルでデバッグするKGDBでも、同じモードを使っている。kgdbを使い、カーネル開発者は、アプリケーション・プログラムのようにカーネルをデバッグできる。カーネル・コードにブレークポイントを設定でき、ステップ動作ができ、変数を参照できる。ハードウェアのデバッグ・レジスタ (debugging register) が使えるアーキテクチャでは、ウォッチポイントが設定できる。ウォッチポイントとは、特定のメモリー・アドレスを実行したり、アクセスしたときのブレークポイントをかけるものである。kgdbには、シリアルケーブルイーサネットを使ってデバッグ対象マシンに繋がったマシンが必要となる。FreeBSDでは、FireWire DMAを使ったデバッグもできる。

特徴[編集]

このデバッガは、グラフィカルユーザインタフェース (GUI) がなく、コマンドラインユーザインタフェース (CUI) である。DDDEclipse CDTGDBtk/InsightGNU 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で再コンパイルした後に動作する。

参考文献[編集]

外部リンク[編集]