ソフトウェア設計及び演習2015
GDBの起動・終了(run, continue, quit)
以下のソーティングプログラムtest.cをダウンロードする.
#include <stdio.h> 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); }
以下のように,ソースファイルをコンパイルして実行ファイルを作る.-g オプションを使用すると,実行ファイルにデバッグ情報を含ませることができる.
$ gcc test.c -g -o test $ ./test 3 2 1 1 3 2 1 2 3
この実行ファイル(今回は「test」)を引数として gdb を起動させる.
$ gdb test GNU gdb (GDB) 7.5-ubuntu ...(いろいろ表示)... (gdb)
メッセージ表示の後に「(gdb)」というプロンプトが表示される.実行ファイルとして「test」を指定しているので,これ以降のコマンドは「test」という実行ファイルに対する処理になる.
まずは,プロンプト上で run というコマンドを実行してみる. run は,プログラムを実行するという意味.
(gdb) run Starting program: /home/... 3 2 1 1 3 2 1 2 3 [ Inferior ...
次にプロンプト上で break main コマンドを実行する.これにより「main 関数に入るまで」という意味を表すブレークポイント(「プログラムを実行したときにここで止まってねという意味」)を設定したことになる.
(gdb) break main Breakpoint 1 at 0x400664: file test.c, line 31.
そして,プログラムを run コマンドで実行させると次のようなブレークポイントについてのメッセージが表示される.
(gdb) run Starting program: /.../test Breakpoint 1, main () at test.c:31 31 show(x, NUM);
main関数の先頭でプログラムが一時停止している状態になっており,他のデバッグ用コマンドを受け付ける状態になっている.
次に next コマンドを使用して,プログラムを一行ずつ進める.next コマンドは,次の行に関数があった場合にその関数を全て実行する.
(gdb) next 3 2 1 32 sort(x, NUM); (gdb) next 1 3 2 1 2 3 33 }
continue コマンドを使用してプログラムの最後まで実行する.(continue コマンドは,次のブレークポイントがあればそこまで実行し,無ければ最後まで実行する,という機能を持っている.)
(gdb) continue Continuing. Program exited with code 02.
最後に quit コマンドで gdb を終了させる.
(gdb) quit
最終更新日:2015/03/05 10:01:27