Haciendo buen uso del matamoscas
Ahora que estoy integrando los modulos que llevo creados, el proyecto se esta poniendo mas interesante desde el punto de vista programatico. Y al menos funciona mejor que la versión que tenía hace tiempo. Sin embargo, la integración, si no soy cuidadosa, tiene un precio muy elevado: bugs!
Según el manual del programador feliz, assert() hace esto: "Evaluates an expression and, when the result is false, prints a diagnostic message and aborts the program.". Pero la verdad no me da mucha información como el lugar de los hechos, generalmente nos manda a lugares muy siniestros. Recuerdo que uno de mis amigos me paso un tip para "personalizar" el mencionado assert(). Se puede mejorar con el uso de macros y una funcioncita como ésta:
Y el macro para llamar a esta función es algo asi, por supuesto, sin olvidar eliminar todo ese codigo cuando no se este depurando:
Y en algun punto del programa donde quiera verificar, por ejemplo:
Por lo menos esto me hace la vida mas fácil al correguir los errorcillos. Gracias a mi amigo Feri por el tip, BIG KISS!!
leer más...
Según el manual del programador feliz, assert() hace esto: "Evaluates an expression and, when the result is false, prints a diagnostic message and aborts the program.". Pero la verdad no me da mucha información como el lugar de los hechos, generalmente nos manda a lugares muy siniestros. Recuerdo que uno de mis amigos me paso un tip para "personalizar" el mencionado assert(). Se puede mejorar con el uso de macros y una funcioncita como ésta:
bool myFunctionAssert(
bool expression,
char *description,
int line,
char *file )
{
// Si todo salio bien, continuemos
if( expression ) { return false; }
char message[ 256 ];
char *pfile = file;
// Para mostrar el nombre del archivo afectado
pfile += strlen( file );
while( pfile != file && *( pfile - 1 ) != '\\' )
{ pfile--; }
// Mostramos una ventanita con nuestro mensaje,
// en que linea de codigo y en que archivo
// pasaron los acontecimientos
sprintf_s( message, sizeof( message ),
"%s\nLine: %d\nFile: %s\n\nNos detenemos a depurar?",
description, line, pfile);
if( MessageBox( NULL, message,
"Creo que metimos la pata!",
MB_YESNO | MB_ICONWARNING ) == IDYES )
{
return true;
}
return false;
}
Y el macro para llamar a esta función es algo asi, por supuesto, sin olvidar eliminar todo ese codigo cuando no se este depurando:
#if defined (ESTOY_DEPURANDO)
#define myAssert( expression, description)
if( myFunctionAssert(
( expression ), description, __LINE__, __FILE__ ) )
{ _asm{ int 3 } }
#else
#define myAssert( expression, description ) ( ( void ) 0 )
#endif
Y en algun punto del programa donde quiera verificar, por ejemplo:
Object *elChicoMalo = crearChicoMalo();
myAssert( elChicoMalo != NULL,
"Hay! no se pudo hacer un chico malo!" );
Por lo menos esto me hace la vida mas fácil al correguir los errorcillos. Gracias a mi amigo Feri por el tip, BIG KISS!!
leer más...
<< Página Principal