Tengo una clase donde uno de sus métodos lanza una excepción y estuve debugueando y efectivamente se ejecuta la parte del throw, pero donde tengo el try... catch no está capturando la excepción y crashea la app. A qué se puede deber esto?
Si pones el código problemático te podremos ayudar. Se nos acabaron las bolas de cristal para adivinar problemas hace un par de meses
...
try{
buffer=servidor->recibirBuffer();
}catch(...){
break;
}
string server::recibirBuffer()
{
string rtn;
char buffer[MAX_BUFFER+1];
DWORD bytes;
fd_set ss;
timeval touts;
FD_ZERO(&ss);
FD_SET(cnn,&ss);
touts.tv_sec = 5;
touts.tv_usec = 0;
if(select(0,&ss,NULL,NULL,&touts) == SOCKET_ERROR || (bytes=recv(cnn,buffer,MAX_BUFFER,0))<=0)
throw 1;
if(bytes>0)
{
buffer[bytes]='\0';
rtn = buffer;
}
return rtn;
}
EDIT:
Lo extraño es, que a veces funciona y a veces no.
Puede que estes recogiendo la excepción en un sitio inadecuado, estas van ascendiendo desde las funciones donde se lanzan hasta el main, por ejemplo:
Si tienes una función 'function', en la cual lanzas una excepción, si tienes el catch para ESE TIPO de excepción en 'function', la capturará ahí, si no, ascenderá hacia la función "padre", por llamarla así, es decir, si desde el main llamas a 'function', la excepción asciende al main, ahora, si ahí la capturas, perfecto, pero si no la capturas ahí, te peta la aplicación ;).
Espero haberme explicado bien :)
Saludos