Problema capturando excepciones

Iniciado por naderST, 5 Marzo 2012, 03:52 AM

0 Miembros y 1 Visitante están viendo este tema.

naderST

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?

Akai

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

naderST

#2
...
Código (cpp) [Seleccionar]

       try{
       buffer=servidor->recibirBuffer();
       }catch(...){
       break;
       }


Código (cpp) [Seleccionar]

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.

darkvidhack

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
live and let die

la duda es la base de todo conocimiento