ソフトウェア設計及び演習2017

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


最終更新日:2017/04/03 09:14:21