martes, 7 de mayo de 2013

DEPURADORES GDB Y DDD

Las dos herramientas que se han estudiado para la depuración son gdb y ddd, el primero de ellos es en línea de comandos y el segundo en entorno gráfico. DDD utiliza gdb y lamentablemente, presenta algunos bugs ausentes en gdb y por tanto, resulta más interesante trabajar directamente sobre gdb.

gdb

gdb (GNU Debugger) es un depurador de programas escritos en cualquier lenguaje de programación y compilados con gcc.

El primer paso es compilar el programa en gcc con la opción –g , incorpora información para la depuración. Ídem si se obtienen los programas objeto mediante as con el argumento -gstabs y posteriormente habrá que hacer el enlazado mediante ld..

gcc –g –o holamundo holamundo.c
as –gstabs –o salida.o salida.s

En este momento, ya se puede emplear el depurador, para ello hay que invocar a gdb y pasar como argumento holamundo.

gdb holamundo


Principales opciones

  • backtrace Muestra la pila de llamadas
  • b función ó b fichero:línea Sirven para establecer puntos de ruptura o breakpoint en la posición indicada
  • c continua
  • frame n Muestra la llamada n
  • info b  Muestra los breakpoints
  • info registers Muestra la información contenida en los registros
  • l función ó l fichero:línea listamos el código
  • n pasa a la línea siguiente sin entrar en la llamada.
  • print expresión muestra el valor de una expresión
  • q salir
  • r Ejecuta el programa.
  • s pasa a la línea siguiente entrando en la llamada.
  • x /nfu addr Examina la memoria (n unidades) en formato(f) string (s), hexadecimal (x) o machine (i) en tamaño u byte (b), halfword(h), word(w), giant word(g).

ddd

ddd (Data Display Debugger) es un depurador en entorno gráfico. Las posibilidades que ofrece son prácticamente las mismas que podemos realizar en gdb. 

De igual manera que en el programa anterior, el primer paso sería compilar el programa incluyendo los símbolos para su posterior depuración.
gcc –g –o holamundo holamundo.c
En este momento, se debe abrir el fichero, tal y como se muestra en la imagen, utilizando la opción filter para abrir carpetas y open para abrir el fichero.


Una vez abierto el fichero, se presentan dos ventanas de especial interés, la primera, muestra el programa en C y la segunda, en la parte inferior, incorpora la herramienta gdb.




Para poner un breakpoint en una línea concreta del programa, hay que pinchar encima del número y en la parte superior se puede seleccionar Break.


En este punto ya se puede comenzar la ejecución del programa


En este momento, el programa ha comenzado su ejecución y se ha detenido en la línea 8. Aquí ya es posible mostrar el valor de una variable e incluso cambiarla.

Para mostrar una variable, se sebe seleccionar primero y mediante el botón derecho se muestra un menú que tiene varias opciones.
Para modificar el valor de la misma, otra vez se debe seleccionar y en la barra de iconos de la parte superior está la opción Set
En este momento, para retomar la ejecución del programa se deberá seleccionar la opción Cont, que aparece en la ventana de iconos de la derecha.
Si se desea conocer el contenido de la memoria, en el entorno gráfico se puede acceder mediante Data -> Memory. En este momento, se deberá elegir cuantas zonas de memoria se desean mostrar, en que formato y qué tipo de agrupación.
En el caso de que se desee conocer la información relativa a registros, hay que ir al menú Status -> Registers