以下のソーティングプログラム[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 この実行ファイル(今回は「test」)を引数として gdb を起動させる. 8< $ gdb test GNU gdb (GDB) 7.5-ubuntu ...(いろいろ表示)... (gdb) >8 メッセージ表示の後に「(gdb)」というプロンプトが表示される.実行ファイルとして「test」を指定しているので,これ以降のコマンドは「test」という実行ファイルに対する処理になる. まずは,プロンプト上で run というコマンドを実行してみる. run は,プログラムを実行するという意味. 8< (gdb) run Starting program: /home/... 3 2 1 1 3 2 1 2 3 [ Inferior ... >8 次にプロンプト上で break main コマンドを実行する.これにより「main 関数に入るまで」という意味を表すブレークポイント(「プログラムを実行したときにここで止まってねという意味」)を設定したことになる. 8< (gdb) break main Breakpoint 1 at 0x400664: file test.c, line 31. >8 そして,プログラムを run コマンドで実行させると次のようなブレークポイントについてのメッセージが表示される. 8< (gdb) run Starting program: /.../test Breakpoint 1, main () at test.c:31 31 show(x, NUM); >8 main関数の先頭でプログラムが一時停止している状態になっており,他のデバッグ用コマンドを受け付ける状態になっている. 次に 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