GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo usar GDB para depurar programas en Ubuntu 20.04

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.

Nota: Los comandos discutidos en este artículo han sido probados en Ubuntu 20.04 LTS (fosa focal).

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.


Ubuntu
  1. Cómo usar el comando de apagado de Linux en Ubuntu 18.04 y CentOS 7

  2. Cómo usar el comando Uptime en Ubuntu Linux

  3. Cómo usar el comando de cadena en Ubuntu

  4. Cómo usar el comando netplan en Ubuntu

  5. Cómo usar ssh-keyscan en Ubuntu

Cómo usar el comando cd en Linux

Cómo instalar y usar el comando Curl en Ubuntu 20.04

Cómo usar el comando tcpdump en Ubuntu 20.04

Cómo instalar y usar Busybox en Ubuntu

Cómo usar Ubuntu

Cómo instalar y usar el comando Exa en Ubuntu 20.04