C言語 - GDB - break point の設定

 
1. 基本
2. ソース指定
3. ループ回数を指定する
4. 現在の break point を見る
5. break point を削除する

1. 基本

 関数での break

(gdb) b 関数名
 break は b と略すことができます。  関数内での行番号の break

(gdb) b 行番号

2. ソース指定

 ソース内の関数での break

(gdb) b ソースファイル名:関数名
 ソース内での行番号の break

(gdb) b ソースファイル名:行番号

3. ループ回数を指定する

 デバッグするときに「特定のループ回数で止めて、値を確認したい」ってのはよくあることです。  if を使うとそれができます。
#include <stdio.h>

int main(int argc, char *argv[])
{
	for (int i=0; i<10; i++)
	{
		printf("i=[%02d]\n", i);
	}

	return 0;
}


 というソースを書いてデバッグします。

> gdb a.out
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "amd64-marcel-freebsd"...
(gdb) b main
Breakpoint 1 at 0x4007b6: file breakif.cpp, line 5.
(gdb) r
Starting program: /usr/home/kitayama/lang/cpp/sample/a.out

Breakpoint 1, main (argc=1, argv=0x7fffffffe480) at breakif.cpp:5
5               for (int i=0; i<10; i++)
(gdb) l
1       #include <stdio.h>
2
3       int main(int argc, char *argv[])
4       {
5               for (int i=0; i<10; i++)
6               {
7                       printf("i=[%02d]\n", i);
8               }
9
10              return 0;
(gdb) break 7 if i==5
Breakpoint 2 at 0x4007d1: file breakif.cpp, line 7.
(gdb) c
Continuing.
i=[00]
i=[01]
i=[02]
i=[03]
i=[04]

Breakpoint 2, main (argc=1, argv=0x7fffffffe480) at breakif.cpp:7
7                       printf("i=[%02d]\n", i);
 27行目で、i が 5 になったときに break するように指定しています。  37行目で指定したように break しているのがわかります。

4. 現在の break point を見る

 現在の break point を見るには「break」と入力します。

(gdb) break
Note: breakpoint 1 also set at pc 0x7ffff4c02a9e.

5. break point を削除する

 break を複数箇所に設定していて、ある箇所は、解析できた場合、その break の箇所では止めなくてよくなった場合・・・。

(gdb) delete 番号
 番号は、前項の break で表示される番号です。
ハイスピードプラン