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

ブレークポイントの設定(break, delete)

ブレークポイントの設定 [break, delete]

先ほどと同様に,実行ファイルを引数として gdb を起動させる.

$ gdb test
...

次に,sort 関数を中心として、そのまわりの10行を表示する.

(gdb) list sort
4       void show(int x[], int n);
5
6       #define NUM 3
7       int x[] = {3, 2, 1};
8
9       int sort(int x[], int n) {
10          int i, j, temp;
11          for (i = 0; i < n-1; i++) {
12              for (j = n-1; j > i; j--) {
13                  if (x[j-1] > x[j]) {

sort 関数にブレークポイントを設定して,run コマンドでプログラムを実行する.

(gdb) break sort
Breakpoint 1 at 0x400553: file test.c, line 11.
(gdb) run
Starting program: /home/staff/luxin/OLD/program1/test
3       2       1

Breakpoint 1, sort (x=0x601028, n=3) at test.c:11
11          for (i = 0; i < n-1; i++) {

今の行を中心にして,そのまわりの10行を表示して様子を探る.

(gdb) list
6	#define NUM 3
7	int x[] = {3, 2, 1};
8	
9	int sort(int x[], int n) {
10	    int i, j, temp;
11	    for (i = 0; i < n-1; i++) {
12	        for (j = n-1; j > i; j--) {
13	            if (x[j-1] > x[j]) {
14	                temp = x[j];
15	                x[j] = x[j-1];

15行目にブレークポイントを設定して,continue コマンドで15行目に移動する.

(gdb) break 15
Breakpoint 2 at 0x4005a2: file test.c, line 15.
(gdb) continue
Continuing.

Breakpoint 2, sort (x=0x601028, n=3) at test.c:15
15                      x[j] = x[j-1];

print コマンドで交換するような配列 x の成分を調べる.

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

continue コマンドを使用して,次のブレークポイントまで実行する.

(gdb) continue
Continuing.

Breakpoint 1, sort (x=0x601028, n=3) at test.c:15
15                      x[j] = x[j-1];

もう一回,print コマンドで交換するような配列 x の成分を調べる.

(gdb) print j
$4 = 1
(gdb) print x[j]
$5 = 1
(gdb) print x[j-1]
$6 = 3

info breakpoints コマンドによって,設定されたすべてのブレークポイントを表示する.

(gdb) info breakpoints
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400553 in sort at test.c:11
        breakpoint already hit 1 time
2       breakpoint     keep y   0x00000000004005a2 in sort at test.c:15
        breakpoint already hit 1 time

delete コマンドで指定されたブレークポイントを削除する.(番号を指定しなければ,全てのブレークポイントを削除することができる.) もう一回,info breakpoints コマンドですべてのブレークポイントを表示する.

(gdb) delete 1
(gdb) delete 2
(gdb) info breakpoints
No breakpoints or watchpoints.

continue コマンドを使用してプログラムの最後まで実行して,quit コマンドで gdb を終了させる.

(gdb) continue
Continuing.
1       3       2
1       2       3

Program exited with code 02.
(gdb) quit


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