1. ホーム
  2. c

[解決済み] GDB: 変数が等しい場合にブレークする

2023-01-02 12:20:42

質問

ある変数が設定した値と等しくなったときに、GDBにブレークポイントを設定させたいのですが、この例を試してみました。

#include <stdio.h>
main()
{ 
     int i = 0;
     for(i=0;i<7;++i)
        printf("%d\n", i);

     return 0;
}

GDBからの出力です。

(gdb) break if ((int)i == 5)
No default breakpoint address now.
(gdb) run
Starting program: /home/SIFE/run 
0
1
2
3
4
5
6

Program exited normally.
(gdb)

ご覧のように、GDBはブレークポイントを作りませんでしたが、これはGDBで可能なのでしょうか?

どのように解決するのですか?

ブレークポイントにネストされたウォッチポイントの他に を使用すると、'ファイル名:行番号' に 1 つのブレークポイントを設定し、条件を使用することもできます。 その方が簡単な場合もあります。

(gdb) break iter.c:6 if i == 5
Breakpoint 2 at 0x4004dc: file iter.c, line 6.
(gdb) c
Continuing.
0
1
2
3
4

Breakpoint 2, main () at iter.c:6
6           printf("%d\n", i);

私のように行番号が変わることにうんざりしている場合は、ラベルを追加します。 を追加し、そのラベルにブレークポイントを設定することができます。

#include <stdio.h>
main()
{ 
     int i = 0;
     for(i=0;i<7;++i) {
       looping:
        printf("%d\n", i);
     }
     return 0;
}

(gdb) break main:looping if i == 5