Tutorial básico de GDB, parte 2

En el post que escribí anteriormente sobre el tema, veíamos una introducción al manejo de GDB con un programa de un único fichero.

En esta entrega vamos a indagar un poco más y vamos a ver cómo se trabaja con diferentes ficheros, y algunos comandos adicionales que nos harán la vida más sencilla, y que nos olvidemos definitivamente de «depurar con printfs«.

Continuar leyendo «Tutorial básico de GDB, parte 2»

Tutorial rápido de GDB

GDB: The Gnu Debugger, amado por algunos, odiado por otros y desconocido entre un público mucho más amplio. Vamos a hacer un pequeño tutorial sobre cómo usar este debugger para depurar un programa sencillo escrito en C.

El programa en función sería este, para probarlo creamos un archivo nuevo y lo guardamos:

#include
int main(){
	int primero;
	int intermedio;
	int resultado;
	intermedio = primero + 4 * 5 - 2;
	resultado = intermedio * 4;
	printf("%d\n",resultado);
}

Compilamos usando

 gcc -ggdb ejemplo.c

Ejecutamos nuestro programa y nos devuelve 15450136, y lo volvemos a ejecutar y devuelve 42352664, algo va mal…

NOTA: Si has descubierto por tí mismo donde falla enhorabuena!, pero vamos a usar el depurador para cuando esos casos no son TAN evidentes.

Vamos a ver qué va mal, para ello abrimos nuestra consola y escribimos

 gdb a.out 

si ejecutamos el comando run se ejecuta un equivalente a escribir en la consola

 ./a.out 

No pasa nada especial, como era de esperar. Vamos a darle un poco más de vida y vamos a agregar nuestro primer breakpoint, que se agregan en función del número de línea en el fichero original. Una vez agregado gdb nos devuelve un mensaje diciendo donde ha agregado el punto de interrupción.

(gdb) break 7
Punto de interrupción 1 at 0x80483cd: file prueba.c, line 7.
 

Si volvemos a ejecutar, veremos que se detiene en la línea que hemos especificado, y nos muestra esta información por pantalla:

Breakpoint 1, main () at prueba.c:7
7		intermedio = primero + 4 * 5 - 2;

La diferencia entre nuestro editor de textos y esto, es que una vez detenidos en la línea podemos escribir

(gdb) print intermedio
$1 = 134513691
(gdb) print primero
$2 = 2654196

y nos mostrará por pantalla el valor de las variables en tiempo de ejecución. Limpio, simple, y no hemos tenido que ensuciar el código llenando la ejecución de printfs. De esta manera podemos ver que el error estaba en que no habíamos inicializado la variable primero, y lo podremos corregir.

Dejo para un posible futuro post el trabajo con estructuras y con múltiples ficheros, pero para una primera aproximación espero que sea útil.

Con todos vosotros, el formulario de FISII (Actualizado)

Aquí os dejo el «super» formulario para el examen del próximo día 2 de Física, para aquellos que como yo tengais que examinaros en la EPS.

Espero que os sea de utilidad:

DISCLAIMER: Este formulario se entrega sin garantía de aprobado, no me hago responsable de cualquier gazapo que pudiera contener la hoja, aunque sí os digo que si hay algo mal, no es a mala intención, no soy malo.

Si encontrais algun fallo comentadmelo aquí mismo en el blog, podeis salvar a mucha gente :)

Formulario Global FISICA II Actualización

CTUALIZACION:He actualizado el formulario con errores corregidos, nuevas constantes y alguna que otra explicación de más que nunca sobra

«El conocimiento humano pertenece al mundo»