[C con Clase] Logueo de errores...
Steven Davidson
srd4121 en njit.edu
Vie Ago 13 10:03:53 CEST 2010
Hola Gilberto,
Gilberto Cuba Ricardo wrote:
> Hola Lista,
>
> Ante todo una disculpa por el OFF-TOPIC, pero como a mi entender
> todos aquí somos programadores, o por lo menos tratamos, nos servirá
> a todos el tener en cuenta este tipo de elemento a la hora de
> elaborar una aplicación "seria".
>
No pienso que el tema se considere "fuera de lugar"; de hecho, pienso
que es apropiado para el tema general de la informática.
> El asunto es que se me ha metido en la cabeza tratar de cazar los
> errores que pudiera dar mi aplicación cuando ha tenido un mal
> funcionamiento y se ha cerrado de manera inesperada o algo pasó y
> dejó de ejecutarse. La idea sería que cuando sucede esto, tenga una
> salida elegante y no brusca (dentro de lo posible), y poder loguear
Acabas de describir las razones por la implementación del sistema de
excepciones en C++. Sugiero que eches un vistazo a ello. Puedes
consultar el capítulo 43 de nuestro curso de C++:
http://c.conclase.net/curso/index.php?cap=043#inicio
> dónde fue que se produjo el error y demás cosas, como si fuera un
> volcado hacia archivo del estado interno de la aplicación antes de
> cerrarse. Esto lo he visto que lo hacen muchas aplicaciones, incluso
> el propio Windows, así que me parece que no es algo de otro mundo,
> es lograble.
>
> Por lo que mi pregunta gira en torno a si alguno tiene alguna idea
> de como desarrollar esto, o si lo ha hecho, que por favor nos de la
> pista de por donde se debe seguir, o sino, de cómo pudieramos
> encausar las búsquedas para encontrar información de este tipo en la
> internet.
>
En cuanto a la bitácora, simplemente crea un fichero al principio y ve
agregando mensajes al final del fichero. Sugiero abrir el fichero en
modo de "agregado al final". Por ejemplo,
ofstream ofsBitacora( "error.log", ios::app );
...
ofsBitacora << "Error: " << szError[n] << ';' << Fecha_Actual() << endl;
Otra solución es abrir el fichero, agregar el mensaje a ello, y cerrarlo
cada vez que quieras escribir un mensaje. Esto requiere más tiempo de
ejecución, pero al menos podemos asegurarnos de que el fichero contenga
los mensajes que vamos escribiendo; por si acaso, ocurre algo
catastrófico y el fichero no se puede cerrar correctamente.
Espero que esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase