デバッガを使うとプログラムの実行を途中で止めて、変数の内容などを調べることができる。
コンパイルするときは gcc に -g オプションをつける。
% gcc -g -o test test.c
gdb を起動する。プログラムの名前が test だとしよう。
% gdb test
この状態でプログラムリストを見ることができる。
(gdb) list main
main() 関数のソースリストが表示されるはずである。
次に break point を設定しよう。プログラムは実行中に break point に到達すると、実行を中断してデバッガに戻る。例えば関数 foo() を実行しようとしたときにプログラムを中断するのなら、
(gdb) break foo
とする。もちろん main() 関数を実行しようとしたときに中断することも可能で、
(gdb) break main
とする。list コマンドで、ソースコードを表示させた後なら、行番号を直接指定することもできる。
(gdb) break 110
このコマンドは 110 行を実行しようとしたら中断する。
break point の機能を使うことで、プログラムの中で動作が不安定な部分に到達するまでは、通常どおりに実行し、不安定な部分に到達したらプログラムを一時停止することができる。 一時停止後は、以下にのべる方法で、変数の値の変化を追いながら、プログラムを一行一行実行することができる。
break point を設定したら、プログラムを実行する。
(gdb) run
設定した break point に到達したら、変数の値などを参照することもできる。
(gdb) print i
このコマンドは変数 i の値を表示する。
いったん中断した後、一行づつプログラムを実行させることもできる。
(gdb) next
一行実行したら、再び中断する。
その行の中で関数を呼び出している場合、step 命令を使えば、その呼ばれた関数の中で中断する。
(gdb) step
一行づつプログラムを実行するのではなく、プログラムの残りを最後まで実行するには
(gdb) cont
とする。
Segmentation fault がおきたら、あわてずさわがず gdb を起動する。
% gdb test
つぎに break point を設定せずに実行する。
(gdb) run
デバッガは segmentation fault がおきた場所で実行を中断するはずである。
(gdb) where
すると where コマンドでどこで中断したのか見ることができる。また up, down コマンドで、その関数を呼び出した関数へ移動すうることができる。もちろん他のコマンドも使える。
Copyright (C) 1999-2000 Shigeru Chiba
Email: chiba@is.tsukuba.ac.jp