Este es el programa que estoy tratando de depuración:¿Por qué gdb se detiene en una línea diferente de la que muestra "i b" al regresar de la función?
#include <stdio.h>
int i = 5;
int main(void)
{
int x = 3;
display(x);
return 0;
}
void display(int x)
{
for (i=0; i<x; ++i) {
printf("i is %d.\n", i);
}
}
Este código está viniendo de aquí http://www.dirac.org/linux/gdb/05-Stepping_And_Resuming.php#breakpointsandwatchpoints. Aquí está el problema:
(gdb) break display
Breakpoint 1 at 0x40051e: file try5.c, line 15.
(gdb) run
Starting program: /home/ja/gdb/learning/try5
Breakpoint 1, display (x=3) at try5.c:15
(gdb) frame 1
#1 0x000000000040050c in main() at try5.c:8
(gdb) break
Breakpoint 2 at 0x40050c: file try5.c, line 8.
(gdb) c
Continuing.
i is 0.
i is 1.
i is 2.
Breakpoint 2, main() at try5.c:9
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040051e in display at try5.c:15
breakpoint already hit 1 time
2 breakpoint keep y 0x000000000040050c in main at try5.c:8
breakpoint already hit 1 time
(gdb) c
Continuing.
Program exited normally.
(gdb) q
Debugger finished
Se suponía que iba a parar en la línea 8 en main() pero se detuvo en la línea 9 que main(). Para mí es engañoso. Creo que debería detenerse en la línea 9, porque esto es lo que hacen los comandos 'break': establece un punto de corte en la próxima instrucción. ¿Pero por qué "puntos de interrupción de información" dicen que el punto de ruptura se estableció en la línea 8?
¿qué hay de poner cierre-soporte cerca de la devolución 0; ? ¿Las líneas comienzan desde 0 o 1? –
Tengo una duda de que su programa incluso compila ... 'void display (int x)' se define ** después de que ** se usa. ¡Esto debería haber sido un error del compilador! – YePhIcK
@ tuğrul büyükışık - gracias, arreglé ese – user1042840