GDB - GNU Debugger

GDB

Según Wikipedia, GDB es:

Es un depurador portable que se puede utilizar en varias plataformas Unix y funciona para varios lenguajes de programación como C, C++ y Fortran. GDB fue escrito por Richard Stallman en 1986. GDB es software libre distribuido bajo la licencia GPL.

GDB ofrece la posibilidad de trazar y modificar la ejecución de un programa. El usuario puede controlar y alterar los valores de las variables internas del programa.

GDB no contiene su propia interfaz gráfica de usuario y por defecto se controla mediante una interfaz de línea de comandos. Existen diversos front-ends que han sido diseñados para GDB, como Data Display Debugger, GDBtk/Insight y el «modo GUD» en Emacs.

¿Que debo saber?

En la ayuda del gdb se refieren al programa a depurar como inferior, por lo que cuando se tope con este término en busquedas o en la documentación, se está refiriendo al programa al que se le va a hacer Debug.

Muchos de los comandos gdb tienen abreviaciones, por ejemplo, "p" es la abreviación del comando "print". Para indicar cual es la abreviación del comando, se va a colocar entre paréntesis al lado del nombre del comando.

Imagen de la interface GDB
Fig. 1 : Muestra de la interface GDB

Ejecutar gdb

Para ejecutar el gdb, debemos ubicarnos en el directorio donde está el ejecutable a ser sometido al Debugging, y estando en ese directorio se debe ejecutar:

La opción "-tui" activa la interface de Usuario, la que muestra la pantalla dividida en dos secciones (y puede ser ampliada a más), mostrando el código fuente y el interprete de comandos.

Primeros pasos con gdb

Lo primero que se debe saber de gdb es como iniciar un programa, como detenerlo y los diferentes modos de ejecución.

Funciones básicas gdb

Después de saber iniciar el programa, es necesario aprender como colocar Breakpoint, como quitarlos, como ver el contenido de las variables, inclusive como asignarle un valor a una variable durante el proceso de Debug.

Imprimir con print

Utilizado para imprimir el valor que tiene una variable en un momento dado de la ejecución.

En algunos casos, cuando el string sea muy largo, es necesario eliminar el limite de impresión de variables, lo cual se hace con:

  • set print elements 0
  • Cuando se imprime una variable que su contenido tiene caracteres que se repiten, y no se desea que muestre el mensaje <repeats 189 times>, se debe ejecutar:

  • set print repeats 0
  • break

    Una de las instrucciones más importantes, se encarga de colocar los Breakpoints (o puntos de interrupción) del programa. Estos puntos de interrupción se introducen en el programa para evaluar el estado del programa en cierto momento, particularmente se utiliza para evaluar el contenido de variables.

    Para colocar Breakpoints, existen varios métodos. A continuación se presentan algunos:

    Usos de gdb con archivo core

    Después de saber iniciar el programa, es necesario aprender como colocar Breakpoint, como quitarlos, como ver el contenido de las variables, inclusive como asignarle un valor a una variable durante el proceso de Debug.

    Seguimiento de procesos hijos

    Cuando se hace el debug de un programa que tiene proceso hijos (con la instrucción fork), el GDB por defecto sigue al proceso padre. Esto se puede cambiar, mediante el seteo de la siguiente instrucción:

    Este seteo es válido solamente en plataformas modernas, especificamente es soportado por kernel version 2.5.46 y superiores.