Como hacer un pequeño "debug" a un programa en C

Hace unos dias aprendi a usar el  GNU debugger "gdb". Ya hace un tiempo que sabia usar otros debuggers empotrados en IDES como en netbeans, etc...

(Editado) En primer lugar a gusto los colores, pero bajo mi punto de vista "gdb" no es una buena eleccion para proyectos grandes.
Despues de unos meses utilizando este debugger, puedo decir que es muy eficiente y recomiendo para todo tipos de proyectos su uso.

A continuacion algunas nociones sobre gdb.
  • En primer lugar es necesario compilar el ejecutable con el flag para gdb, siendo -g o -ggdb. Compilando con esta sintaxis: gcc -g fuente.c -o ejecutable.
  • Una vez con el ejecutable, lanzamos el debugger: gdb ejecutable
    • Como puntualizacion decir que de esta manera: gdb -tui "exec", se lanzara una sesion interactiva en la cual veras como avanza el codigo
  • Si ya sabes donde para saltate este paso, si no con el comando list o 'l' podras ver el codigo, digamos que quieres ver la funcion fun1, el comando para ver esa funcion seria list fun1, y si esta en otro fichero a parte list fichero:fun1 y si es un metodo de otra clase list clase.fun1.
  • Ahora es el momento de marcar los breakpoints, lineas donde quieres parar el debugger, para lo cual escribimos en el interprete del gdb: break nº linea a parar y en caso que se encuentre en otro fichero break file:numero...
  • Por otra parte es interesante el hecho de que se pueden programar una serie de comandos cuando llege a esa parada, tambien es interesante el uso de watchpoints, que nos permiten controlar una variable y dependiendo de como lo configuremos ordenar a que cada vez que el valor de la variable cambien nos lo avise
  • Arrancamos el programa con el comando "run" o "r" y los argumentos necesarios y parara cuando llegue a la linea que marcamos antes.
  • Una vez estemos parados en una linea tenemos tres opciones:
    • Avanzar un paso, que podria suponer profundizar en el programa, o sea si llamamos a una funcion que entremos en ella y avanzamos linea por linea: step o s
    • Avanzar un paso pero en el ambito local sin profundizar: next o n
    • Avanzar hasta el siguiente breakpoint o en su defecto terminar la ejectucion: continue o c
  • Cuando estemos en la posicion adecuada, nos sera util examinar las variables:
    • Para tener un vistazo general de todas las variables: info locals
    • Para ver el valor de una variable especifica: print "var" o p "var"
    • so on...
  • Por ultimo cuando nos interesa saber cuando se ha producido un fallo de segmentacion o cualquier signal por el estilo, una vez que el programa se cuelgue, es muy util revisar la traza: backtrace o bt; y para mayor exactitud subir o bajar el ambito de la funcion que produjo esa exepcion con los comandos; up y down
Para terminar, es importante saber que se pueden escribir scripts para gdb, muy util para imprimir listas enlazadas, y como ultimo recomendar el front-end grafico llamado ddd, que como atributo especial nos permite ver con forma de grafo y graficamente los arboles o las listas enlazadas.

Comments

Popular posts from this blog

Rename refactor in VIM

Saber la temperatura de tu pc