ソフトウェア設計及び演習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

この実行ファイルを引数として gdb を起動させる.

$ gdb test
GNU gdb (GDB) 7.2-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /.../test...done.

ライセンス情報が表示された後に、「(gdb)」というプロンプトが表示される.そこで、break main コマンドを使用する.これは,「main 関数に入るまで」という意味を表すブレークポイントを設定することである.

(gdb) break main
Breakpoint 1 at 0x400664: file test.c, line 31.

そして,プログラムが run コマンドで実行させて,次のようなブレークポイントについてのメッセージが表示される.「main 関数に入るまで」という条件を満たしたため,プログラムがブレークポイントに一時停止されて,他のデバッグ用のコマンドを受ける状態になっている.

(gdb) run
Starting program: /.../test

Breakpoint 1, main () at test.c:31
31          show(x, NUM);

次に 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