Question: I like to make GDB set a break point when a variable equal some value I set, I tried this example:

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

     return 0;
}

```

Output from 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)

```

Like you see, GDB didn't make any break point, is this possible with GDB?

Answer: 
in addition to a watchpoint nested inside a breakpoint
you can also set a single breakpoint on the 'filename:line\_number' and use a condition.
I find it sometimes easier.

```
(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);

```

If like me you get tired of line numbers changing, you can add a label
then set the breakpoint on the label like so:

```
#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

```
First, you need to compile your code with appropriate flags, enabling debug into code.

```
$ gcc -Wall -g -ggdb -o ex1 ex1.c

```

then just run you code with your favourite debugger

```
$ gdb ./ex1

```

show me the code.

```
(gdb) list
1   #include <stdio.h>
2   int main(void)
3   { 
4     int i = 0;
5     for(i=0;i<7;++i)
6       printf("%d\n", i);
7   
8     return 0;
9   }

```

break on lines 5 and looks if i == 5.

```
(gdb) b 5
Breakpoint 1 at 0x4004fb: file ex1.c, line 5.
(gdb) rwatch i if i==5
Hardware read watchpoint 5: i

```

checking breakpoints

```
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004004fb in main at ex1.c:5
    breakpoint already hit 1 time
5       read watchpoint keep y                      i
    stop only if i==5

```

running the program

```
(gdb) c
Continuing.
0
1
2
3
4
Hardware read watchpoint 5: i

Value = 5
0x0000000000400523 in main () at ex1.c:5
5     for(i=0;i<7;++i)

```