tutorial test subaru que online debuggear como c gdb

c - test - gdb tutorial



GDB: romper si el valor de la variable es igual (4)

Me gusta hacer que GDB establezca un punto de ruptura cuando una variable sea igual a algún valor que establecí, intenté con este ejemplo:

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

Salida 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)

Como ves, GDB no hizo ningún punto de quiebre, ¿es esto posible con GDB?


Además de un punto de observación anidado dentro de un punto de interrupción, también puede establecer un único punto de interrupción en el ''nombre de archivo: número_línea'' y usar una condición. Encuentro que a veces es más fácil.

(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, como yo, te cansas de que los números de línea cambien, puedes agregar una etiqueta y luego establecer el punto de interrupción en la etiqueta como sigue:

#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


Hay puntos de observación de hardware y software. Son para leer y escribir una variable. Necesitas consultar un tutorial:

http://www.unknownroad.com/rtfm/gdbtut/gdbwatch.html

Para establecer un punto de observación, primero debe dividir el código en un lugar donde el varianle i está presente en el entorno y establecer el punto de observación.

watch comando watch se usa para establecer un watchpoit para escritura, mientras que rwatch para lectura, y awatch para lectura / escritura.


Puede usar un punto de observación para esto (un punto de interrupción en datos en lugar de código).

Puedes comenzar usando watch i .
A continuación, establezca una condición para ello con la condition <breakpoint num> i == 5

Puede obtener el número de punto de interrupción utilizando el info watch


$ gcc -Wall -g -ggdb -o ex1 ex1.c $ gdb ./ex1 (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 } (gdb) b 5 Breakpoint 1 at 0x4004fb: file ex1.c, line 5. (gdb) rwatch i if i==5 Hardware read watchpoint 5: i (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 (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)