Depurar un programa (C, C++, ...)
Ante las preguntas realizadas por Oscar sobre el uso de GDB y problemas con el famoso "segmentation fault", me he decidido a hacer un pequeño manual de GDB y otras herramientas útiles para el depurado. Seguramente se me queden muchas cosas en el tintero, pero todos sabemos que las recetas no están cerradas cuando se publican. Se agradecerán todos los comentarios.
gdb
GDB o el GNU DeBugger, es el programa usado para depurar los programas en GNU/Linux. No es el único, pero sí uno de los más potentes, sobre todo para programas escritos en C y C++. Para poder utilizar todas sus características, será necesario que, durante la compilación, dejemos información de depurado en el ejecutable. Si estamos utilizando gcc o cc, esto se hace mediante la opción -ggdb. ¡Ya tenemos nuestro fichero preparado para ser depurado! Ahora basta utilizar la orden: $ gdb ejecutable
Uso de GDB
gdb es bastante complejo, y sólo detallaré aquí los pasos iniciales para debugar el típico "hola mundo". Primero, cargaremos el ejecutable compilado con las opciones de debug "-ggdb": gdb ejecutable
gdb> br main
gdb> r
- p "print" imprime el valor de una variable.
- d "display" igual que print, pero se muestran cada vez que pulsemos "s" o "n".
- n "next" Continúa con la siguiente instrucción de la función actual
- s "step" Continúa con la siguiente instrucción de la que se tiene información de depurado (si hay una llamada a función, entrará dentro).
- c "continue" continúa la ejecución del programa.
- h "help" muestra la ayuda
GNU/Emacs
GDB sólo es muy poco amigable, así que yo prefiero utilizarlo junto con GNU/Emacs. Gano dos cosas, principalmente: ver el código y coloreado del mismo. Para ello, basta con pulsa ESC+x (o M+x) y escribir la orden "gdb". Emacs nos pedirá el resto de la línea de órdenes, donde pondremos el nombre del ejecutable y del core (si es que existe). Cuando lo tengamos, nos aparecerá una pantalla tipo terminal igual que si hubiéramos iniciado gdb en una consola, pero cuando comencemos a trazar el código se nos dividirá la pantalla en dos, mostrando en el otro lado el código (con una flechita muy molona que nos cuenta por dónde vamos).ddd
Aunque muchas veces uso Emacs con gdb, debo admitir que mi favorito es ddd. Su instalación es realmente compleja: # apt-get install ddd
COREs
Una gran ayuda frente a los "segmentation faults" son los archivos COREs. Te preguntarás dónde andan, claro :-D pues no andan por ningún sitio porque los tienes desactivados. Para activarlos, sólo tienes que hacer: $ ulimit -c unlimited
$ gdb ejecutable core
$ ulimit -c 0
Más información
- Páginas "man" de gdb, ddd, ...
[ show comments ]
blog comments powered by Disqus