コンテンツにスキップ

GNUデバッガ

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。AvocatoBot (会話 | 投稿記録) による 2012年4月19日 (木) 10:22個人設定で未設定ならUTC)時点の版 (r2.7.1) (ロボットによる 追加: ar:مصحح جنو)であり、現在の版とは大きく異なる場合があります。

GNU デバッガ
開発元 GNU Project
最新版
リポジトリ ウィキデータを編集
種別 デバッガ
ライセンス 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 を使ったデバッグもできる。

特徴

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

参考文献

外部リンク