GNU DEBUGGER o GDB Una poderosa herramienta de depuración de código fuente para programas de Linux

GNU DEBUGGER o GDB Una poderosa herramienta de depuración de código fuente para programas de Linux

Un depurador juega un papel vital en cualquier sistema de desarrollo de software. Nadie puede escribir un código libre de errores a la vez. Durante el curso del desarrollo, se están planteando los errores y se debe resolver para mejorar más. Un sistema de desarrollo está incompleto sin un depurador. Teniendo en cuenta la comunidad de desarrolladores de código abierto, GNU Depugger es su mejor opción. También se utiliza para el desarrollo de software comercial en plataformas de tipo UNIX.

Código fuente de depuración con GNU Debugger

Depurador de GNU, también conocido como gdb, nos permite escabullirse a través del código mientras se ejecuta o lo que un programa estaba tratando de hacer en este momento antes de que se bloqueara. Básicamente, GDB nos ayuda a hacer cuatro cosas principales para detectar defectos en el código fuente.

  1. Iniciar el programa, especificando argumentos que pueden afectar el comportamiento general.
  2. Detener el programa en condiciones especificadas.
  3. Examinar el bloqueo o cuándo se detuvo el programa.
  4. Cambiar el código y experimentar con el código modificado instantáneamente.

Podemos usar GDB para depurar programas escritos en C y C ++ sin mucho esfuerzo. A partir de ahora soporte para otros lenguajes de programación como D, Módula-2, Fortano son parciales.

Comenzando con GNU Depugger o GDB

Gdb se invoca usando el gdb dominio. Al emitir gdb, Muestra algo de información sobre la plataforma y lo entrega en el (gdb) indicado como se muestra a continuación.

[[correo electrónico protegido] ~]# GDB
Salida de muestra
GNU GDB (GDB) Fedora 7.6.50.20130731-19.FC20 Copyright (C) 2013 Free Software Foundation, Inc. Licencia GPLV3+: GNU GPL versión 3 o posterior Este es un software gratuito: puede cambiarlo y redistribuirlo. No hay garantía, en la medida permitida por la ley. Escriba "Mostrar copia" y "Mostrar garantía" para más detalles. Este GDB se configuró como "X86_64-Redhat-Linux-Gnu". Escriba "Mostrar configuración" para los detalles de configuración. Para las instrucciones de informes de errores, consulte: . Encuentre el manual de GDB y otros recursos de documentación en línea en: . Para obtener ayuda, escriba "ayuda". Escriba "Apropos Word" para buscar comandos relacionados con "Word". (gdb)

Tipo ayuda Lista para salir de las diferentes clases de comandos disponibles dentro de GDB. Tipo ayuda seguido de un nombre de clase para una lista de comandos en esa clase. Tipo ayudar a todo Para la lista de todos los comandos. Se permiten abreviaturas del nombre del comando si son inequívocas. Por ejemplo, puedes escribir norte En lugar de escribir próximo o C para continuar etcétera.

Los comandos GDB más utilizados

Comúnmente utilizado Comandos GDB se enumeran en la siguiente tabla. Estos comandos deben usarse desde el símbolo del sistema GDB (gdb).

Dominio Descripción
correr Iniciar la ejecución de un programa
abandonar Deja de GDB
impreso expr Imprimir expresión donde expr Puede ser un nombre variable también
próximo Ir a la siguiente línea
paso Pase a la siguiente línea
continuar Continuar desde la línea actual hasta el final del programa o el próximo punto de quiebre

Tenga en cuenta la diferencia entre los dos comandos paso y próximo. El próximo El comando no va a la función de dentro si la siguiente línea es una llamada de función. Mientras paso El comando puede entrar en la función interior y ver qué pasa allí.

Una sesión de muestra con GDB

Considere el siguiente código fuente.

// suma.c #include int sum (int a, int b) int c; c = a + b; regreso c;  int main () int x, y, z; printf ("\ nenter el primer número:"); scanf ("%d", & x); printf ("Ingrese el segundo número:"); scanf ("%d", & y); z = sum (x, y); printf ("La suma es %d \ n \ n", z); regresar 0; 

Para depurar el archivo de salida, necesitamos compilar lo mismo con -gramo opción para GCC como sigue.

$ gcc -g suma.C -O suma

El archivo de salida suma se puede conectar a GDB a través de cualquiera de las siguientes 2 maneras:

1. Especificando el archivo de salida como un argumento para GDB.

$ GDB suma

2. Ejecutar el archivo de salida dentro de GDB usando archivo dominio.

$ GDB (GDB) suma de archivo

El lista El comando enumera las líneas en el archivo del código fuente y mueve el puntero. Así que primero lista mostrará las primeras 10 líneas y la próxima lista muestra los siguientes 10 y así sucesivamente.

(GDB) Lista 1 #include 2 3 int Sum (int a, int b) 4 int c; 5 c = a + b; 6 retorno c; 7 8 9 int main () 10 int x, y, z;

Para comenzar la ejecución, emita el correr dominio. Ahora el programa se ejecuta normalmente. Pero olvidamos poner algunos puntos de interrupción en el código fuente para la depuración, correcto? Estos puntos de interrupción se pueden especificar para funciones o en líneas especificadas.

(GDB) B Principal

Nota: He usado una abreviatura b para romper.

Después de establecer el punto de interrupción en la función principal, la nueva forma del programa se detendrá en la línea 11. Lo mismo puede estar en vigencia si el número de línea se conoce antes.

(GDB) b suma.C: 11

Ahora atraviesa las líneas de código usando el próximo o norte dominio. Es importante observar que próximo El comando no ingresa el código de función a menos que se establezca un punto de interrupción en la función. Probemos el imprimir comandar ahora. Establezca el punto de interrupción en la suma de la función como se muestra a continuación.

(GDB) B SUM SUM BreakPoint 1 a 0x4005AA: suma de archivo.C, línea 5. (GDB) r Programa inicial: /root /suma Ingrese el primer número: 2 Ingrese el segundo número: 3 punto de interrupción 1, suma (a = 2, b = 3) a la suma.C: 5 5 C = A + B; (GDB) P A $ 1 = 2 (GDB) P B $ 2 = 3 (GDB) C Continuación. La suma es 5 [inferior 1 (proceso 3444) salió normalmente]

Si el programa que se ejecuta requiere parámetros de línea de comandos, proporcione lo mismo junto con el correr ordenar como.

(GDB) Run .. 

Los archivos de biblioteca compartidos asociados con el programa en ejecución actual se pueden enumerar como.

(GDB) Información compartir de Syms Leer Biblioteca de objetos compartidos 0x00000035A6000B10 0x00000035A6019C70 Sí /Lib64 /Ld-Linux-X86-64.entonces.2 0x00000035A641F560 0x00000035A6560BB4 Sí /lib64 /libc.entonces.6

Variables de modificación

Gdb también es capaz de modificar variables a lo largo de la ejecución del programa. Probemos esto. Como se mencionó anteriormente, establezca el punto de descanso en la línea 16 y ejecute el programa.

(GDB) R Programa inicial: /root /suma Ingrese el primer número: 1 Ingrese el segundo número: 2 punto de interrupción 1, main () en suma.c: 16 16 printf ("La suma es %d \ n \ n", z); (GDB) establecido Z = 4 (GDB) C Continuación. La suma es 4

Ahora a = 1, b = 2 y el resultado debería ser z = 3. Pero aquí cambiamos el resultado final a z = 4 en la función principal. De esta manera, la depuración puede ser más fácil usando GDB.

Habilitar/deshabilitar puntos de interrupción

Para obtener la lista de todos los puntos de interrupción puntos de interrupción de información.

(GDB) Información Puntos de interrupción Tipo NUM DIRECCIÓN DIRECCIÓN QUÉ 1 PUNTO DE ROMISO Mantener y 0x00000000004005C2 en Main en suma.C: 11

Aquí solo hay un punto de quiebre y es. habilitado deshabilitar los puntos de interrupción especifica el número de punto de interrupción junto con el desactivar dominio. Para habilitar luego usar el permitir dominio.

(GDB) Desactivar 1 (GDB) Información de puntos de interrupción de información.C: 11

También puede eliminar los puntos de interrupción con borrar dominio.

Depuración de procesos en ejecución

Numerosos procesos se ejecutan en el fondo en un sistema GNU/Linux. Para depurar un proceso en ejecución en primer lugar, necesitamos encontrar la identificación del proceso de ese proceso en particular. pidof El comando le da el PID de un proceso.

$ Pidof 

Ahora necesitamos adjuntar este pid a GDB. Hay 2 formas.

1. Especificando PID junto con GDB.

$ GDB -P 

2. Usando adjuntar Comando de GDB.

(GDB) Adjuntar 

Eso es todo por ahora. Estos son solo conceptos básicos de GDB para comenzar bien en la depuración del código fuente y es mucho más que las cosas explicadas anteriormente. Por ejemplo, podemos depurar utilizando la información de la pila, las variables de entorno y los lotes más. Intenta jugar con todas estas cosas ..