Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: naderST en 5 Marzo 2012, 03:52 am



Título: Problema capturando excepciones
Publicado por: naderST en 5 Marzo 2012, 03:52 am
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?


Título: Re: Problema capturando excepciones
Publicado por: Akai en 5 Marzo 2012, 10:18 am
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


Título: Re: Problema capturando excepciones
Publicado por: naderST en 5 Marzo 2012, 15:14 pm
...
Código
  1.        try{
  2.        buffer=servidor->recibirBuffer();
  3.        }catch(...){
  4.        break;
  5.        }
  6.  

Código
  1. string server::recibirBuffer()
  2. {
  3.    string rtn;
  4.    char buffer[MAX_BUFFER+1];
  5.    DWORD bytes;
  6.    fd_set ss;
  7.    timeval touts;
  8.  
  9.    FD_ZERO(&ss);
  10.    FD_SET(cnn,&ss);
  11.  
  12.    touts.tv_sec = 5;
  13.    touts.tv_usec = 0;
  14.  
  15.    if(select(0,&ss,NULL,NULL,&touts) == SOCKET_ERROR || (bytes=recv(cnn,buffer,MAX_BUFFER,0))<=0)
  16.        throw 1;
  17.    if(bytes>0)
  18.    {
  19.        buffer[bytes]='\0';
  20.        rtn = buffer;
  21.    }
  22.    return rtn;
  23. }
  24.  

EDIT:

Lo extraño es, que a veces funciona y a veces no.


Título: Re: Problema capturando excepciones
Publicado por: darkvidhack en 8 Marzo 2012, 18:38 pm
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