Ayuda, Programa C++ no atrapa ninguna excepción

Iniciado por johnf9896, 19 Enero 2015, 04:45 AM

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

johnf9896

Estoy desarrollando un juego, bien una biblioteca para hacer juegos basada en SFML y un juego basado en esa biblioteca.

El problema es que cuando el programa lanza una excepción el programa se crashea aunque una bloques try con catchs que

pueden atrapar la excepción.

Incluso si hago esto
Código (cpp) [Seleccionar]

try{
throw std::runtime_error("Error");
}
catch(std::exception &ex){

}


o esto
Código (cpp) [Seleccionar]

try{
throw std::exception();
}
catch(...){
}


el programa se crashea.

No entiendo porque sucede esto. Además, esto solo pasa en mi programa, cuando escribo los ejemplos de arriba en un simple

archivo .cpp y lo compilo, el programa atrapa las excepciones normalmente como de be ser.

Estoy usando Code::Blocks y Netbeans para escribir la biblioteca y el programa. Tengo proyectos en ambos IDEs.
Yo uso el compilador MinGW versión 4.8.1

Espero que alguien tenga alguna idea de porqué esto sucede y tenga alguna solución al problema.

Gracias por leer y responder.

ivancea96

Código (cpp) [Seleccionar]
#include <exception>
#include <iostream>

using namespace std;

int main(){
    try{
        throw exception();
    }catch(exception &e){
        cout << "Error: " << e.what() << endl;
    }
    try{
        throw 666;
    }catch(int n){
        cout << "Error: " << n << endl;
    }
    return 0;
}


Ese código, ¿Te muestra los mensajes?

johnf9896

En un .cpp aparte sí pero en mi programa no

ivancea96

Más detalles. ¿Cómo que "en un .cpp aparte" sí? ¿Qué tiene tu programa?

johnf9896

Me refiero a que si creo un nuevo .cpp y lo compilo con ese código, el código funciona pero pongo ese código en mi proyecto y lo compilo el programa no atrapa las excepciones y se crashea

johnf9896

Ya he solucionado el problema.

Tenía la idea de que lo que causaba ese problema era una opción que se pasaba al compilador.

Así que busqué en la página gcc.gnu.org la lista de todas las opciones que se podían pasar y leyendo encontré que si se quería pasar excepciones a travez de varias bibliotecas compartidas (dlls)  no debía usar en el linker la opción -static-libgcc ni -static-libstdc++ porque éstas bloqueaban las excepciones.

Así que solo quité las opciones del linker y listo asunto solucionado.

Gracias invancea96 por las respuestas.