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