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

ブレークポイントへの条件付き [if

ブレークポイントへの条件付き [if]

以下のソーティングプログラムtest1.cをダウンロードする.

+include  <stdio.h>

int  sort(int x[], int n);
void show(int x[], int n);
void change(int x[], int j);

+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]) {
                change(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 change(int x[], int j) {
    printf("x[%d] = %d <-> x[%d] = %d\n", 
           j-1, x[j-1], j, x[j]);    
}

void main(void) {		
    show(x, NUM);
    sort(x, NUM);
}

以下のように,ソースファイルをコンパイルして実行ファイルを作る.

$ gcc test1.c -g -o test1
$ ./test1
3       2       1
x[1] = 2 <-> x[2] = 1
x[0] = 3 <-> x[1] = 1
1       3       2
x[1] = 3 <-> x[2] = 2
1       2       3

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

$ gdb test1
...

change 関数のはじまりに到達してかつ j = 1 の場合だけ停止する条件をつけて,change 関数にブレークポイントを設定する.

(gdb) break change if j == 1
Breakpoint 1 at 0x400688: file test3.c, line 34.

run コマンドでプログラムを実行する.

(gdb) run
Starting program: /home/staff/luxin/OLD/program1/test3
3       2       1
x[1] = 2 <-> x[2] = 1

Breakpoint 1, change (x=0x601028, j=1) at test3.c:34
34                 j-1, x[j-1], j, x[j]);

change 関数のコードを表示する.

(gdb) list
29          printf("\n");
30      }
31
32      void change(int x[], int j) {
33          printf("x[%d] = %d <-> x[%d] = %d\n",
34                 j-1, x[j-1], j, x[j]);
35      }
36
37      void main(void) {
38          show(x, NUM);

print コマンドを使用して,変数の値を調べることができる.

(gdb) print j
$1 = 1
(gdb) print x[j-1]
$2 = 3
(gdb) print x[j]
$3 = 1

delete コマンドでブレークポイントを削除する.continue コマンドを使用してプログラムの最後まで実行して,quit コマンドで gdb を終了させる.

(gdb) delete 1
(gdb) continue
Continuing.
x[0] = 3 <-> x[1] = 1
1       3       2
x[1] = 3 <-> x[2] = 2
1       2       3

Program exited with code 02.
(gdb) quit


最終更新日:2015/03/05 10:01:22