Cómo usar el depurador GNU en Linux

El depurador GNU se utiliza para depurar un programa, analizar fallos o ver qué hace el programa en un punto en particular. Fue desarrollado por el Proyecto GNU en la década de 1980 y ha sido uno de los depuradores de línea de comandos más utilizados, así como uno de los software GNU más populares.

Primero escribamos un pequeño programa en C que luego depuraremos. Para comenzar, cree un nuevo .C archivo usando empuje o cualquier editor de su elección:

vim test.c

Cree el siguiente programa en C:

#include int main () {int i = 5; flotar f = 5,5 i = i + 3; f = f + 2,2; printf ("Los valores de i y f son:% d y% f \ n", i, f); return 0; }

imprenta Escapar para ir al modo de comando vim. Luego escribe : wq para guardar el programa y salir.

Compile y vea si el programa se ejecuta:

gcc test.c -o test ./test Los valores de i y f son: 8 y 7.700000

Para habilitar el soporte de depuración en un programa, lo compilamos con -gramo bandera. Si no se usa la bandera, el usuario aún puede depurar el programa, aunque con opciones limitadas.

prueba gcc.c -g -o prueba

Para comenzar a depurar nuestro archivo ejecutable prueba en gdb, corremos:

prueba gdb

Abrirá el gdb consola, donde puede escribir el gdb comandos. Para ver una lista de comandos, use el ayuda mando.

$ (gdb) help Lista de clases de comandos: alias - Alias ​​de otros comandos puntos de interrupción - Hacer que el programa se detenga en ciertos puntos de datos - Examinar archivos de datos - Especificar y examinar los archivos internos - Los comandos de mantenimiento son oscuros - Funciones oscuras en ejecución - Ejecución de la pila de programas - Examen del estado de la pila - Soporte de consultas de estado - Puntos de seguimiento de las instalaciones de soporte - Seguimiento de la ejecución del programa sin detener el programa definido por el usuario - Comandos definidos por el usuario Escriba "ayuda" seguido de un nombre de clase para obtener una lista de los comandos de esa clase. Escriba "ayudar a todos" para ver la lista de todos los comandos. Escriba "ayuda" seguido del nombre del comando para obtener la documentación completa. Escriba "apropos word" para buscar comandos relacionados con "word". Se permiten las abreviaturas de los nombres de los comandos si no son ambiguas.

Luego puede escribir ayuda class_name para ver los comandos que pertenecen a esa clase. Para buscar comandos usando una subcadena, use subcadena apropos.

Para establecer un punto de interrupción cuando el programa ingresa a una función, correr:

$ (gdb) romper principal

Aquí establecemos un punto de interrupción en la única función de nuestro código, es decir principal. Usa el comando correr para ejecutar el programa hasta el siguiente punto de interrupción o hasta salir.

$ (gdb) ejecutar

Para establecer un punto de interrupción en una ubicación particular en una función, usar:

descanso * principal + 4

Esto establecerá un punto de interrupción en la cuarta línea de la función principal.

Ahora, para pasar el flujo del programa a la siguiente línea de código, simplemente ejecuta el paso mando.

$ (gdb) paso 5: float f = 5.5;

Para mostrar el contenido de una variable, correr monitor .

$ (gdb) mostrar i 6: i = 5

Para modificar el contenido de una variable, que puede ser necesario para analizar la ejecución de un programa con valores específicos de una variable, ejecutar set variable = Expresión.

$ (gdb) establecer la variable i = 10 $ (gdb) mostrar i 7: i = 10

Aquí, la "Expresión" puede ser cualquier expresión válida (aritmética / lógica). En aras de la simplicidad, simplemente asignamos otro valor (10) a la variable I.

Para imprimir el código ensamblador del programa, usar comando desmontar nombre de función:

Usar solo desmontar para imprimir código ensamblador para todo el programa. Tenga en cuenta la flecha en una línea particular en el código de ensamblaje. Denota que la sesión de depuración está actualmente pausada en esa ubicación de memoria particular (es decir, esa línea de código).

Para saltar el depurador a una línea de código en particular, correr:

$ (gdb) jump * main + 2 Continuando en 0x400528. Punto de interrupción 2, 0x000000000040052a en main () en test.c: 3 3 int main () {1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

Esto hará que el depurador salte a la ubicación de memoria de la segunda línea de código en la función principal. Tenga en cuenta que aquí salté desde el inicio de la ubicación principal a la segunda ubicación. Por lo tanto, variable I nunca se configuró, lo que da como resultado que el depurador arroje un error de que no puede acceder al contenido de la memoria en la dirección de la variable I.

Estos son algunos de los comandos básicos que pueden ayudarlo a comenzar a depurar un archivo ejecutable en Linux. Esperamos que la información de esta página le resulte útil.