Usando gdb, el debugger de linux (i)

GDB (Gnu DeBugger) es una herramienta que nos sirve para saber que es lo que pasa con un programa en determinados momentos de su ejecucion.

Usaremos un sistema de ejemplo muy basico. Pondremos un archivo llamado suma.c

#include <stdio.h>

int main() {
int num1=0;
int num2=0;
int num3;
num1=25;
num2=12;
num3=num1+num2;
printf("%i",num3);

return 0;
}

y compilaremos con informacion de depuracion, la cual para estos momentos nos ayudara muchisimo pero despues tendremos que aprender a trabajar sin esta informacion

gcc -ggdb  suma.c -o suma

y lo pasamos al debuguer con la linea

gdb -q suma

Entraremos al prompt de gdb, el cual nos informa que se cargo correctamente el programa. Para verlo funcionar simplemente necesitamos poner el comando run el cual ejecuta nuestra aplicacion dentro de gdb. Por ser un programa muy sencillo este solo muestra un valor (37) y termina.

Ahora empezara lo bonito, analizar el ejecutable. Debido a que es nuestro pograma y nosotros lo compilamos con ciertos parametros esto es mas que sencillo. Pasamos el comando list (l) para observar el codigo que si podemos fijarnos es lo mismo que esta en nuestro suma.c y con esto procedemos a algo mas practico, los breakpoints.

Un breakpoint es una marca donde el programa se detendra y nosotros tendremos el control de la ejecucion posterior.

Para este archivo usaremos “b 1” lo cual cual nos dara una marca sobre la linea 1. Debido a que en nuestro programa el codigo real empieza hasta el int main() al correrlo con run este se detendra en la linea 4 y no en la 1 como esperariamos. Claro esta es la percepcion al primer instante pero en realidad se detuvo en la linea 3 y nos muestra el contenido de la linea 4 que es la proxima a correr. Damos la opcion continue (c) y el programa se ejecuta de forma normal, tambien tenemos otra opcion que es usar next (n) con la cual corremos una por una cada linea de codigo de nuestro archivo.

Esto es todo por el momento y seguire poniendo mas cosas con mejor codigo y mas practico para poder utilizar todo el potencial de gdb, que con este codigo no se puede hacer realmente mucho. Les dejo un script con la sesion de mi pc para que vean que se debe hacer y para salir de gdb solo ponga q y enter xD yo sufri la primera vez que use man y no sabia esto.

Reading symbols from /archivos/proyectos/gdb/suma...done.
(gdb) l
1	#include <stdio.h>
2
3	int main() {
4	   int num1=0;
5	   int num2=0;
6	   int num3;
7	   num1=25;
8	   num2=12;
9	   num3=num1+num2;
10	   printf("%i",num3);
(gdb) b 1
Breakpoint 1 at 0x80483cd: file suma.c, line 1.
(gdb) r
Starting program: /archivos/proyectos/gdb/suma
Breakpoint 1, main () at suma.c:4
4	   int num1=0;
(gdb) c
Continuing.
37
Program exited normally.
(gdb) r
Starting program: /archivos/proyectos/gdb/suma
Breakpoint 1, main () at suma.c:4
4	   int num1=0;
(gdb) n
5	   int num2=0;
(gdb) n
7	   num1=25;
(gdb) n
8	   num2=12;
(gdb) n
9	   num3=num1+num2;
(gdb) n
10	   printf("%i",num3);
(gdb) n
12	   return 0;
(gdb) n
13	}
(gdb) n
0xb7e9dc76 in __libc_start_main () from /lib/i686/cmov/libc.so.6
(gdb) n
Single stepping until exit from function __libc_start_main,
which has no line number information.
37
Program exited normally.
(gdb) q

Para usar esto es obvio que se necesita tener el compilador gcc, una distribucion linux y gdb instalados.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s