以下のソーティングプログラム[test.c|https://ebwww.cis.iwate-u.ac.jp/~luxin/gdb/test.c]をダウンロードする. 8< #include int sort(int x[], int n); void show(int x[], int n); +define NUM 3 int x[] = {3, 2, 1}; int sort(int x[], int n) { int i, j, temp; for (i = 0; i < n-1; i++) { for (j = n-1; j > i; j--) { if (x[j-1] > x[j]) { temp = x[j]; x[j] = x[j-1]; x[j-1]= temp; } } show(x, NUM); } } void show(int x[], int n) { int i; for (i = 0; i < n ; i++) printf("%d\t", x[i]); printf("\n"); } void main(void) { show(x, NUM); sort(x, NUM); } >8 以下のように,ソースファイルをコンパイルして実行ファイルを作る.-g オプションを使用すると,実行ファイルにデバッグ情報を含ませることができる. 8< $ gcc test.c -g -o test $ ./test 3 2 1 1 3 2 1 2 3 >8 この実行ファイルを引数として gdb を起動させる. 8< $ gdb test GNU gdb (GDB) 7.5-ubuntu ...(いろいろ表示)... (gdb) >8 メッセージ表示の後に「(gdb)」というプロンプトが表示される.そこで、break main コマンドを使用する.これは,「main 関数に入るまで」という意味を表すブレークポイントを設定することである. 8< (gdb) break main Breakpoint 1 at 0x400664: file test.c, line 31. >8 そして,プログラムが run コマンドで実行させて,次のようなブレークポイントについてのメッセージが表示される.「main 関数に入るまで」という条件を満たしたため,プログラムがブレークポイントに一時停止されて,他のデバッグ用のコマンドを受ける状態になっている. 8< (gdb) run Starting program: /.../test Breakpoint 1, main () at test.c:31 31 show(x, NUM); >8 次に next コマンドを使用して,プログラムを一行ずつ進める.(next コマンドは,次の行に関数があった場合にその関数を全て実行する.) 8< (gdb) next 3 2 1 32 sort(x, NUM); (gdb) next 1 3 2 1 2 3 33 } >8 continue コマンドを使用してプログラムの最後まで実行する.(continue コマンドは,次のブレークポイントがあればそこまで実行し,無ければ最後まで実行する,という機能を持っている.) 8< (gdb) continue Continuing. Program exited with code 02. >8 最後に quit コマンドで gdb を終了させる. 8< (gdb) quit >8