プログラムが正しく動作しない場合、 通常は「バグ」がプログラム中に存在します。 それは期待しない結果を返したりクラッシュしたりするプログラム中に、 どこか悪い部分が存在することを意味しています。 デバッガと呼ばれる特別なツールは、 これらのバグを診断し修正することを容易にします。 Cygwin の場合、「GNU DeBugger」を意味する GDB がデバッガです。 このツールは、実行中やクラッシュ後のプログラムの状況を調査することを可能にする、 コントロールされた環境の元でプログラムを動作させます。 クラッシュするプログラムは時折「コア」ファイルを吐き出します。 Cygwin では、これは GDB が直接扱うことが出来ない通常のテキストファイルとなります。
プログラムをデバッグする前に、
プログラムをデバッグ用に準備する必要があります。
ソースをオブジェクトへとコンパイルする際に、
他の全てのフラグに -g を追加します。
これによって、 行番号、変数名そしてその他の有益な内容を含む追加情報がオブジェクトに対して追加されます (オブジェクトのサイズはより大きくなります)。 これらの追加のシンボルとデバッグ情報は、 デバッガがデバッギングをより簡単にするために、 元のソースコードに関する十分な情報をプログラムに対して与えます。
GNUPro の Windows バージョンでは、
GDB はフル機能のグラフィカルインタフェースを備えています。
Cygwin の Net ディストリビューションでは、
GDB はコマンドラインツールとしてのみ使用可能です。
GDB を起動するには、コマンドプロンプトから単に
gdb myapp.exe とタイプします。
GDB 自身について説明するテキストが表示された後、
コマンド入力を促す (gdb) プロンプトが現れます。
このプロンプトが表示されているときは常に、
gdb が run や help
といったコマンドがタイプされるのを待っていることを意味します。
おぉ:-)、help
とタイプすれば入力可能なコマンドのヘルプが表示されますし、
[GDB ユーザーズマニュアル] を読めば
GDB とその使い方に関する完全な説明を得ることが出来ます。
もしプログラムがクラッシュし、
なぜクラッシュしたのかを見極めたいときは、run
をタイプしてプログラムを動作させることが最上の方法です。
クラッシュした後、where をタイプして
どこでクラッシュしたのかを見つけ出すことが出来ますし、
info locals をタイプすることによって
全ローカル変数の値を表示することも出来ます。
個別の変数の値を調べたりポインタがどこを指しているかを知るための
print もまた使えます。
もしプログラムが何か期待しない動作をするのであれば、
break コマンドを使って、
特定の関数または行番号でプログラムを停止させるよう
gdb に伝えることが出来ます。
run を入力すれば、
プログラムは「ブレークポイント」で停止します。
そして他の gdb コマンドを使ってその時点でのプログラムの状態を参照したり、
変数の内容を修正したり、step
でプログラムのステートメントを一つずつ進めるといったことがことが出来ます。
プログラムにコマンドライン引数を与えるため、run
コマンドには追加の引数を与えることが可能であることを覚えておいて下さい。
この 2 つのケースはプログラムに対して同じ結果を及ぼします。