GNU Debugger (GDB) es un depurador de código abierto para sistemas GNU. El depurador es portátil y se puede usar para múltiples lenguajes como C/C++ y Fortran. Se puede usar para depurar programas observando sus estados en puntos de interrupción específicos e incluso alterando el flujo o los valores para una mayor ejecución. Por lo general, el GDB se ejecuta en la línea de comandos, pero también se han desarrollado varias GUI.
En este artículo, exploramos cómo depurar programas C usando GDB en Ubuntu 20.04 LTS (Focal Fossa).
Requisitos
- Sistema Ubuntu 20.04
- Usuario con privilegios sudo para cambiar el nombre de varios archivos.
Instalación de paquetes
Instale paquetes GN de requisitos previos para compilar y depurar. Ejecute el siguiente comando en la terminal:
$ sudo apt install gcc gdb -y
Ejemplo de C-Program para depuración
Código
Antes de ejecutarse, es necesario compilar un programa. Vamos a compilar el siguiente código C en el archivo main.c .
#include <stdio.h> int main() { for (int i=0; i<5; ++i) { printf("Iterator: %d\n", i); } return 0; }
Compilar programa C usando GCC
Por lo general, un código C se compila en GCC usando el siguiente comando:
$ gcc main.c -o bin
Se debe proporcionar otro argumento para incluir símbolos en el binario. Estos símbolos son utilizados por GDB para rastrear y depurar el programa. Ejecute el siguiente comando en la terminal para compilar el código C:
$ gcc -g main.c -o bin
Un archivo ejecutable llamado bin aparecerá.
Ejecutar el programa de prueba
El archivo binario llamado bin se puede ejecutar como cualquier otro archivo ejecutable en una interfaz de línea de comandos. Use el siguiente comando para ejecutarlo en la terminal:
$ ./bin
Aparecerá la salida del código.
Depuración de una aplicación en Linux
Iniciar depurador
Ejecute la utilidad GDB usando el siguiente comando en la terminal:
$ gdb bin
Presiona enter. Aparecerá la consola para la terminal GDB. Introduzca la ejecutar comando en esta consola para ejecutar el ejecutable proporcionado a la utilidad como argumento.
(gdb) run
Puntos de interrupción de depuración
Añadir puntos de interrupción
Los puntos de interrupción se pueden agregar de varias maneras. Agregaremos un punto de interrupción en el printf función en nuestro código. Ejecute el siguiente comando en la terminal para agregar un punto de interrupción:
(gdb) break printf
Alternativamente, también se puede usar un número de línea para agregar un punto de interrupción.
(gdb) break 6
Introduzca la ejecutar comando y el programa se detendrá en el punto de interrupción.
Pasar por los puntos de interrupción
Utilice el comando continuar para continuar la ejecución del programa.
(gdb) continue
Hay otros dos comandos para diferentes propósitos de continuar la ejecución del programa:
- Paso:avanza a través de la siguiente instrucción de máquina.
- Siguiente:pasos a través de la siguiente línea de código.
También se pueden utilizar abreviaturas de comandos. Como abreviatura de continuar el comando es c.
(gdb) c
Información sobre puntos de interrupción
La información sobre los puntos de interrupción se puede observar usando info comando de gdb . Ejecute el siguiente comando en la terminal:
(gdb) info breakpoints
Aparecerá la información sobre los puntos de interrupción.
Nota:El número a la izquierda del punto de interrupción se usa para referirse a él mediante otros comandos.
Eliminar puntos de interrupción
Un punto de interrupción se puede eliminar usando eliminar comando y haciendo referencia al número de punto de interrupción observado en la salida de info utilidad.
(gdb) delete 1
Ahora el punto de interrupción se ha eliminado y, si se ejecuta, el programa se ejecutará directamente hasta el final.
Variables del reloj
Las variables se pueden observar utilizando la utilidad de vigilancia. Primero, necesitamos ingresar el ámbito en el que existe la variable. Para este propósito, primero agregue un punto de interrupción usando el siguiente comando:
(gdb) break 6
Luego ejecute el código que llega a este punto de interrupción.
(gdb) r
Ahora estamos en el ciclo donde la variable i existe.
El reloj Se usará el comando para observar el valor anterior y nuevo de la variable i en el bucle.
(gdb) watch i
Ahora el punto de interrupción generado por watch El comando también aparecerá en la lista de puntos de interrupción. La lista de puntos de interrupción se puede mostrar usando el siguiente comando:
(gdb) info breakpoints
Además, no necesitamos el punto de interrupción insertado anteriormente. Se puede eliminar fácilmente con el siguiente comando:
(gdb) delete 1
Ahora, si continúa, el código verá los valores cada vez que la variable haya cambiado el valor y mostrará tanto los valores antiguos como los nuevos.
(gdb) c
También se pueden observar más iteraciones del programa, usando el mismo comando.
Salir del depurador
Ejecute el siguiente comando en la terminal para salir del depurador.
(gdb) quit
Así de cerca gdb Aparecerá la utilidad y la línea de comandos predeterminada.
Conclusión
En este artículo, exploramos cómo ejecutar y dividir un programa en GDB. Además, también se configuró para romperse cuando el valor de una variable ha cambiado. Esperamos que pueda depurar fácilmente sus programas en GDB después de seguir este artículo.