J'aime faire en sorte que GDB définisse un point de rupture lorsqu'une variable égale une valeur que j'ai définie, j'ai essayé cet exemple:
#include <stdio.h>
main()
{
int i = 0;
for(i=0;i<7;++i)
printf("%d\n", i);
return 0;
}
Sortie de 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)
Comme vous le voyez, GDB n’a pas fait de pause, est-ce possible avec GDB?
en plus d'un point de contrôle imbriqué dans un point d'arrêt, vous pouvez également définir un seul point d'arrêt sur le 'nom de fichier: numéro_ligne' et utiliser une condition. Je trouve ça parfois plus facile.
(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);
Si, comme moi, vous en avez assez des changements de numéros de ligne, vous pouvez ajouter une étiquette, puis définir le point d'arrêt sur l'étiquette de la manière suivante:
#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
Vous pouvez utiliser un point de contrôle à cet effet (point d'arrêt sur des données au lieu de code).
Vous pouvez commencer par utiliser watch i
.
Puis définissez une condition pour cela en utilisant condition <breakpoint num> i == 5
Vous pouvez obtenir le numéro du point d'arrêt en utilisant info watch
Tout d'abord, vous devez compiler votre code avec les indicateurs appropriés pour activer le débogage en code.
$ gcc -Wall -g -ggdb -o ex1 ex1.c
ensuite, lancez simplement votre code avec votre débogueur préféré
$ gdb ./ex1
montre moi le 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 }
pause sur les lignes 5 et regarde si 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
vérification des points d'arrêt
(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
exécuter le programme
(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)
Il existe des points de contrôle matériels et logiciels. Ils sont destinés à la lecture et à l'écriture d'une variable. Vous devez consulter un tutoriel:
http://www.unknownroad.com/rtfm/gdbtut/gdbwatch.html
Pour définir un point de surveillance, vous devez commencer par insérer le code dans un emplacement où le varianle i est présent dans l'environnement et définir le point de surveillance.
La commande watch
permet de définir un watchpoit en écriture, tandis que rwatch
en lecture et awatch
en lecture/écriture.