[C con Clase] Logueo de errores...

Gilberto Cuba Ricardo gilbert en ucp.ho.rimed.cu
Vie Ago 13 18:54:16 CEST 2010


Hola Steven,

Steven Davidson escribió:

> 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

La verdad es que nunca me imaginé que todo esto pudiera salir con las
excepciones. Siempre las había visto ahí, mirándolas con poco ojo
crítico, y las utilicé muy vágamente hace mucho en delphi, pero de ahí
nunca más las había tocado. He mirado este capítulo completo y me
pareció bastante bueno para mí como principiante. Luego he revisado el
sitio: http://ww.zator.com/Cpp/E1_6_1a.htm que me permitió profundizar
aún más; pero ahora, toda esta lectura me ha dejado la impresión de
que es bastante trabajoso, y que hay que ir llevando el "sistema de
excepciones", a la medida que se va construyendo la aplicación. Es
casi imposible, a mi enteder, poder insertarle el tratamiento de las
excepciones, a una aplicación que se encuentra terminada.

Existe algún modelo en específico o acercamiento a él, de como poder
insertar el tratamiento de las excepciones en el modelo de una
aplicación cualquiera. La idea es que no sabría como diseñar lo
suficientemente bien este sistema en una aplicación, de forma tal que
sea lo más genérico posible. Ahora leo a Stroustrup B. [3rd Ed.] "The
C++ Programing Languaje", que espero me de un poco de vista.

> 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.

Esta segunda opción me parece a mí también la más correcta en cuanto
al diseño del sistema de logueo, de forma tal que sea lo más cercano a la
realidad lo que se pueda leer en el archivo.

A todas estas ya he ido desarrollando algunas cositas para poder ir
armándome de algo genérico en cuanto al tratamiento de la excepciones
y, a parte de pensar en como realizar determinados volcados de
información de algunos objetos, aún no sé como diseñarlo. He estado
trabajado en como poder loguear, para el peor de los casos la línea,
nombre del fichero y función en la que se produce la excepción. Para
ello he utilizado a: __LINE__, __FUNCTION__ y __FILE__; que
anteriormente los había utilizado para compilaciones del tipo "Debug".
Pero hoy he visto que también me funciona para el "Release". Mi
preocupación ahora es si con la utilización de estas no vaya a estar
incluyendo en el ejecutable, información referente a "Debug" y el
archivo crezca notoriamente.

> Espero que esto te oriente.

Bastante. Gracias.

> Steven

-- 
Salu2,
 Gilbert





Más información sobre la lista de distribución Cconclase