Trucos de depuracion con GDB que uso a diario

Bruno C.
12 de Agosto del 2026

Viendo tantos hilos con código que «no hace lo que debe», va una lista de comandos de GDB que uso prácticamente a diario y que ahorran mucho tiempo frente a llenar el código de printf para ver qué está pasando.

Compilar con símbolos de depuración (imprescindible, si no GDB no puede mostrarte líneas ni nombres de variables):

gcc -g programa.c -o programa

Sesión típica:

gdb ./programa
(gdb) break main                              // breakpoint al entrar en main
(gdb) run                                     // arranca el programa hasta el breakpoint
(gdb) next                                  // ejecuta la siguiente linea, sin entrar en funciones
(gdb) step                                  // como next, pero SI entra en la funcion que se llame
(gdb) print variable         // muestra el valor actual de una variable
(gdb) backtrace               // muestra la pila de llamadas, muy util cuando peta dentro de una funcion anidada

Un par de comandos que uso menos a menudo pero que salvan mucho tiempo cuando hacen falta:

Breakpoints condicionales. Si el bug solo aparece en la iteración 500 de un bucle, no tiene sentido pulsar «siguiente» 500 veces:

(gdb) break programa.c:42 if i == 500

Watchpoints. Para cuando sabes que una variable cambia a un valor que no debería, pero no sabes dónde. En vez de poner breakpoints por todo el código, le dices a GDB que pare en cuanto esa variable cambie de valor, sin importar en qué línea sea:

(gdb) watch mi_variable

Y para depurar un segmentation fault sin tener que reproducirlo paso a paso: ejecutas el programa normal con run, dejas que crashee, y en el momento del crash haces backtrace. Te dice exactamente en qué línea y con qué pila de llamadas reventó, mucho más rápido que ir comentando código a ciegas para acotar el problema.

¿Qué herramientas usaís vosotros para depurar? ¿GDB, el depurador integrado de vuestro IDE, o alguna otra cosa?

Bruno C.


David Carrero
12 de Agosto del 2026

Uno más que merece la pena conocer, aunque se usa menos a diario: depuración en reversa. GDB puede grabar la ejecución y permitirte retroceder instrucción a instrucción, no solo avanzar:

(gdb) record
(gdb) continue
(gdb) reverse-next     // retrocede una linea
(gdb) reverse-continue     // retrocede hasta el breakpoint anterior

Es especialmente útil cuando una variable llega corrupta a un punto del programa y no sabes dónde se estropeó: en vez de poner breakpoints y adivinar, dejas que el programa falle y vas hacia atrás desde ahí hasta encontrar el momento exacto en que cambió a un valor incorrecto.

Tiene coste de rendimiento notable mientras graba (no es para dejarlo activado siempre), pero para acotar un bug esquivo ahorra muchisimo tiempo frente a repetir la ejecución una y otra vez cambiando breakpoints a mano.

David Carrero


Jota CT
12 de Agosto del 2026

Para quien le cueste acostumbrarse a la interfaz de texto de GDB, un tip rápido: el modo TUI (gdb -tui al arrancar, o Ctrl+X A dentro de una sesión ya abierta) divide la pantalla y te muestra el código fuente en la parte de arriba mientras depuras, en vez de tener que pedir list constantemente para ver dónde estás. No es tan visual como un IDE, pero ayuda bastante a la hora de empezar con GDB en serio.

Jota CT