next up previous
Next: Paso de parámetros en Up: Sesión 2. Freefem y Previous: Visualización de una función

Subsections

Complemento: gdb

La puesta a punto de programas es grandemente facilitada por la utilisación de un debugger. El más simple sur gnu: gdb. El más sofisticado: ddd. Los 2 son compatibles, por lo tanto daremos algunas indicaciones para gdb.

g++ -g -o tarea1 tarea1.cpp xgrafico.cpp -lX11
gbd tarea1
Esta es una secuencia de instrucciones para el programa leemalla.cpp.

g++ -g leemalla.cpp
gbd a.out
l
b 49
run
s
s
s
p nv
...
quit

El comando where

Conocer la linea de detención del programa en el caso de un "bug" no es siempre suficiente, ya que la función del problema puede ser llamada desde muchos lugares. Para conocer la secuencia de llamados a las funciones, y por lo tanto para saber cual parte del programa es la culpable de un llamado a la función "exit", el metodo mas simple es utilizar la función "atexit" de la libreria stdlib:

#include <stdlib.h}
...
void myexit()
{
    cout << "Fin" << endl;
}
...
void main()
{
    atexit(myexit);
...
}
Con esto, en la ejecución del programa via gdb, se pondra un "breakpoint" en la ligne "cout<<"Fin"..." de tal modo que el debugger se detendra automaticamente en esta linea en caso de problema. En efecto, la función atexit(func) fuerza la ejecución de la fonction func en caso de interrupcion por parte del sistema (tipicamente por escritura en zonas de memorias protegidas). Luego, cuando el break se produzca, la función "where" da la lista total de llamados de función en función hasta llegar a func. Así se puede saber donde esta el problema. Tambien son utilis las funciones ``up'' y ``down'' que permiten subir y bajar de funcion en función segun la secuencia de llamados.

Obs: Si se ejecutara el programa simplemente como ./tarea1 y se produjiera algun error entonces el sistema automaticamente generara un archivo llamado core el cual contiene toda la informacion del estado previo a la generación del error. Gracias a este archivo puede invocarse el debugger gdb mediante la instrucción

gdb tarea1 core
y con se podra ver que linea se ejecutaba, el estado de las variables, quien llamo a la subrutina que produjo el error, con que parametros, etc.


next up previous
Next: Paso de parámetros en Up: Sesión 2. Freefem y Previous: Visualización de una función
Jorge San Martin
1998-11-10