Escribir un Programa en C con errores para probar el depurador
Para aprender a depurar en C, crea el siguiente programa C que calcula e imprime el factorial de un numero. Sin embargo este programa C contiene algunos errores para el propósito de depuración.
$ vim factorial.c
# include <stdio.h>
int main()
{
int i, num, j;
printf ("Ingresar un numero: ");
scanf ("%d", &num );
for (i=1; i<num; i++)
j=j*i;
printf("El factorial de %d es %dn",num,j);
}
$ ./a.out
Ingresa un numero: 3
El factorial de 3 es 12548672
Ahora se vera como depurar usando gdb.
Paso 1. Compilar el programa C con la opción -g
Al compilar el programa C con la opción -g se le permite al compilador recolectar la información de depuración.
$ cc -g factorial.c
Paso 2. Configurar un punto de quiebre dentro del programa C
Sintaxis:
break numero_linea
Otros formatos
- break [nombre_archivo]:numero_linea
- break [nombre_archivo]:función
Entonces antes de iniciar el programa, coloca los siguientes puntos de quiebres en el programa factorial.
break 10
Breakpoint 1 at 0x804846f: file factorial.c, line 10.
Paso 3. Ejecutar el programa C en el depurador gdb
run [args]
Puedes iniciar el programa usando el comando run en el depurador gdb. Tambien puedes pasar argumentos a la linea de comando para el programa vía run args. El programa de ejemplo que se esta usando no requiere algun argumento en la linea de comando para ejecutarlo e iniciar el programa.
run
Starting program: /home/usuario/Debugging/c/a.out
Una vez que se haya ejecutado el programa C, este se ejecutaría hasta el primer punto de quiebre.
Breakpoint 1, main () at factorial.c:10
10 j=j*i;
Puedes usar varios comandos gdb para depurar el programa C, tal como se explicara en la siguiente sección.
Paso 4. Imprimir los valores de las variables dentro del depurador gdb
Sintaxis:
print {variable}
Ejemplos:
print i
print j
print num
(gdb) p i
$1 = 1
(gdb) p j
$2 = 3042592
(gdb) p num
$3 = 3
(gdb)
Como se vio arriba, en el programa factorial.c no se inicializó la variable j. Entonces, la variable obtiene un valor basura resultando en un numero grande como valores del factorial.
Repara el problema inicializando la variable j con 1, compila el programa C y ejecútalo de nuevo.
Aunque después de repararlo parece que continúan algunos problemas en el programa, por que continua dando valores de factorial erróneos.
Por eso, coloca el punto de quiebre en la linea 10 y continua con la explicación en la siguiente sección.
Paso 5. Continuar con los comandos de gdb
Hay tres clases de operaciones de gdd que puedes escoger cuando el programa se detiene en un punto de quiebre. Estos son continuar hasta el siguiente punto de quiebre, detenerse en el mismo o detenerse sobre la siguiente linea de programa.
- c o continue: El depurador continuara hasta el siguiente punto de quiebre.
- n o next: El depurador ejecutara la siguiente linea como una sola instruccion.
- s o step: Igual que next pero no trata la funcion como una sola instruccion sino se va hasta la función y la ejecuta linea por linea.
Atajos de comandos gdb
Usa los siguientes atajos para las operaciones mas frecuentes de gdb
l – listar p – imprimir c – continuar s – paso ENTER: al presionar enter se ejecutaría el comando anteriormente ejecutado.
No hay comentarios:
Publicar un comentario