Inicio > Entorno y utilidades > gdb

gdb: GNU Debugger

gdb (GNU Debugger) es una potente herramienta para analizar y depurar la ejecución de programas escritos en varios lenguajes de programación como C, C++, Fortran, etc. Es esencial para comprender el comportamiento interno de un programa y para encontrar y corregir errores. Admite varios escenarios de depuración, como la conexión a procesos en ejecución o el análisis de archivos core.

Descripción general

gdb proporciona funciones de depuración profundas, como controlar el flujo de ejecución del programa, inspeccionar valores de variables y verificar el estado de la memoria. Es particularmente útil para analizar problemas en binarios compilados.

Funciones principales

  • Iniciar/detener programas en ejecución
  • Establecer puntos de interrupción (breakpoint)
  • Inspeccionar y modificar valores de variables
  • Verificar el rastreo de la pila (stack trace)
  • Inspeccionar el contenido de la memoria
  • Analizar archivos core

Opciones principales

gdb se usa principalmente en modo interactivo, pero puede realizar configuraciones iniciales o ejecutar scripts no interactivos a través de opciones específicas al inicio.

Opciones de inicio/conexión

Comando generado:

Combina los comandos.

Descripción:

`gdb` Ejecutando el comando.

Combina las opciones anteriores para ejecutar virtualmente los comandos junto con la IA.

Ejemplos de uso

Dado que gdb se usa a menudo de forma interactiva, los ejemplos también incluyen comandos que se ingresan en el prompt de gdb.

Iniciar una sesión de depuración básica

gdb ./my_program

Carga el programa compilado (por ejemplo, my_program) con gdb para iniciar una sesión de depuración.

Establecer punto de interrupción y ejecutar

gdb ./my_program
(gdb) b main
(gdb) r

Establece un punto de interrupción en la función main y ejecuta el programa. La ejecución se detiene en el punto de interrupción.

Verificar el valor de una variable

gdb ./my_program
(gdb) b my_function
(gdb) r
(gdb) p my_variable

Después de detenerse en un punto de interrupción, imprime el valor actual de una variable específica.

Analizar un archivo core

gdb ./my_program core.dump

Analiza el archivo core generado por un fallo del programa para examinar el estado del programa en el momento del fallo.

Conectar a un proceso en ejecución

gdb -p 12345

Conecta gdb al proceso con PID 12345, que ya está en ejecución, para depurarlo.

Ejecutar comandos automáticamente al inicio

gdb -ex 'b main' -ex 'r' ./my_program

Establece un punto de interrupción en la función main y ejecuta el programa inmediatamente al iniciar gdb.

Instalación

gdb no se proporciona por defecto en la mayoría de las distribuciones de Linux y debe instalarse como parte de los paquetes de herramientas de desarrollo.

Debian/Ubuntu

sudo apt update && sudo apt install gdb

Instala gdb usando el gestor de paquetes APT.

Fedora/CentOS/RHEL

sudo dnf install gdb

Instala gdb usando el gestor de paquetes DNF o YUM.

Consejos y precauciones

Consejos y precauciones para usar gdb de manera efectiva.

Incluir información de depuración al compilar

Para depurar con gdb, debes compilar el programa con la opción `-g` para incluir información de depuración. De lo contrario, no podrás ver la información del código fuente ni los nombres de las variables.

  • Ejemplo: `gcc -g myprogram.c -o myprogram`

Comandos gdb de uso frecuente

Comandos clave de uso frecuente dentro del prompt de gdb.

  • `b <nombre_funcion/numero_linea>`: Establecer punto de interrupción (breakpoint)
  • `r`: Ejecutar programa (run)
  • `n`: Ir a la siguiente línea (next)
  • `s`: Entrar en una función (step)
  • `p <nombre_variable>`: Imprimir valor de variable (print)
  • `c`: Continuar hasta el siguiente punto de interrupción (continue)
  • `q`: Salir de gdb (quit)

Uso del modo TUI

El uso del modo de interfaz de usuario de texto (TUI) de gdb puede mejorar la eficiencia de la depuración al permitir ver el código fuente, los registros, el ensamblador, etc., simultáneamente.

  • Usar `gdb -tui <programa>` o el comando `layout src` dentro de gdb

Comandos de la misma categoría