Me enfrenta un problema extraño. A saber, Qt de alguna manera desactiva el manejo de excepciones en mi programa. No puedo detectar ninguna excepción, y cuando lanzo una aplicación de excepción, falla.El manejo de excepciones no funciona con Qt en Windows
Estoy usando Qt 4.7.0 (32 bit) de Qt SDK v2010.05 en Windows 7 (64 bit), g ++ (GCC) 4.5.1 de MinGW, NetBeans 6.9.1. Pero también lo hice con g ++ 3.4.5 (también de MinGW) y Qt Creator 2.0.1 - el mismo comportamiento extraño.
Por ejemplo (caso más simple):
#include <Qt/QApplication.h>
#include <iostream>
#include <stdexcept>
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
try {
cout << "Before exception" << endl;
throw runtime_error("Exception occured");
cout << "After exception" << endl;
} catch (runtime_error& exc) {
cout << exc.what() << endl;
exit(1);
}
return 0;
}
Cuando ejecuto anterior programa Tengo esta salida:
Antes excepción
Esta aplicación ha solicitado el tiempo de ejecución de interrumpir de una manera inusual
Póngase en contacto con el equipo de soporte de la aplicación para obtener más información.
He intentado agregar el distintivo "-fexceptions" a g ++ pero no ha cambiado nada.
Cuando no uso de Qt, todo está bien:
#include <Qt/QApplication.h> // It is not caused only by including Qt header
// so it doesn't matter if I comment this out or not
#include <iostream>
#include <stdexcept>
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[]) {
// QApplication app(argc, argv);
try {
cout << "Before exception" << endl;
throw runtime_error("Exception occured");
cout << "After exception" << endl;
} catch (runtime_error& exc) {
cout << exc.what() << endl;
exit(1);
}
return 0;
}
La salida:
Antes excepción
ha producido una excepción
¿Alguien sabe qué es esto suceder de esa manera y cómo solucionar esto? ¿Tiene algo que ver con el tipo de método de manejo de excepciones (SJLJ o Dwarf-2) utilizado cuando se construyó Qt?
¡Vaya, me asustaste! Probablemente estamos a punto de cambiar a Qt por recomendación mía y esto hubiera sido un asesino. Lo bueno es que funciona con VS. –
¿Dónde se cuelga exactamente? ¿Alguna posibilidad de que pueda encontrar una ubicación más exacta? QApplication's notify() tal vez? – Bart
probablemente esté configurado con el indicador '-no-exceptions'. Intenta reconfigurar y volver a crear el Qt SDK. –