付録: デバッガ (gdb) の使い方

デバッガを使うとプログラムの実行を途中で止めて、変数の内容などを調べることができる。


コンパイル

コンパイルするときは gcc に -g オプションをつける。


デバッグ

gdb を起動する。プログラムの名前が test だとしよう。

この状態でプログラムリストを見ることができる。

main() 関数のソースリストが表示されるはずである。

次に break point を設定しよう。プログラムは実行中に break point に到達すると、実行を中断してデバッガに戻る。例えば関数 foo() を実行しようとしたときにプログラムを中断するのなら、

とする。もちろん main() 関数を実行しようとしたときに中断することも可能で、

とする。list コマンドで、ソースコードを表示させた後なら、行番号を直接指定することもできる。

このコマンドは 110 行を実行しようとしたら中断する。

break point の機能を使うことで、プログラムの中で動作が不安定な部分に到達するまでは、通常どおりに実行し、不安定な部分に到達したらプログラムを一時停止することができる。 一時停止後は、以下にのべる方法で、変数の値の変化を追いながら、プログラムを一行一行実行することができる。

break point を設定したら、プログラムを実行する。

設定した break point に到達したら、変数の値などを参照することもできる。

このコマンドは変数 i の値を表示する。

いったん中断した後、一行づつプログラムを実行させることもできる。

一行実行したら、再び中断する。

その行の中で関数を呼び出している場合、step 命令を使えば、その呼ばれた関数の中で中断する。

一行づつプログラムを実行するのではなく、プログラムの残りを最後まで実行するには

とする。


Segmentation Fault がおきたらどうするか

Segmentation fault がおきたら、あわてずさわがず gdb を起動する。

つぎに break point を設定せずに実行する。

デバッガは segmentation fault がおきた場所で実行を中断するはずである。

すると where コマンドでどこで中断したのか見ることができる。また up, down コマンドで、その関数を呼び出した関数へ移動すうることができる。もちろん他のコマンドも使える。



アセンブリ・プログラムのデバッグ

アセンブリ・プログラムの場合も gdb である程度デバッグ可能である。 その場合、以下の命令を使う。




目次へ戻る

Copyright (C) 1999-2000 Shigeru Chiba

Email: chiba@is.tsukuba.ac.jp