2010-11-10 3 views
8

Je suis confronté à un problème étrange. À savoir, Qt désactive d'une manière ou d'une autre la gestion des exceptions dans mon programme. Je ne peux pas attraper aucune exception, et quand je lance une application d'exception se bloque. J'utilise Qt 4.7.0 (32 bits) de Qt SDK v2010.05 sur Windows 7 (64 bits), g ++ (GCC) 4.5.1 de MinGW, NetBeans 6.9.1. Mais j'ai aussi mâché ça avec g ++ 3.4.5 (également de MinGW) et Qt Creator 2.0.1 - même comportement étrange.La gestion des exceptions ne fonctionne pas avec Qt sous Windows

Par exemple (cas le plus 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; 
} 

Quand j'exercerai programme ci-dessus, j'ai cette sortie:

Avant exception

Cette application a demandé l'exécution de mettre fin à d'une manière inhabituelle.
Veuillez contacter l'équipe de support de l'application pour plus d'informations.

J'ai essayé d'ajouter un drapeau "-fexceptions" à g ++ mais cela n'a rien changé.

Quand je ne l'utilise Qt, tout est OK:

#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 sortie:

Avant exception
Exception survenue

Quelqu'un sait pourquoi il en est arriver de cette façon et comment résoudre ce problème? Cela a-t-il quelque chose à voir avec le type de méthode de gestion des exceptions (SJLJ ou Dwarf-2) utilisé lors de la construction de Qt?

+0

Ouf, tu m'as fait peur! Nous sommes probablement sur le point de passer à Qt sur ma recommandation et cela aurait été un tueur. Bonne chose que cela fonctionne avec VS. –

+0

Où se bloque-t-il exactement? Avez-vous une chance de trouver un endroit plus précis? QApplication's notify() peut-être? – Bart

+4

est probablement configuré avec l'indicateur '-no-exceptions'. Essayez de reconfigurer et refaire le Qt SDK. –

Répondre

8

J'ai reconfiguré et recompilé Qt avec le drapeau -exceptions:
D:\Qt\2010.05\qt>mingw32-make confclean && configure -exceptions && mingw32-make
et maintenant tout est ok!

Merci à tous pour votre aide, en particulier à Nick D!

De toute façon, c'est très étrange que j'ai eu Qt construire sans ce drapeau. J'avais téléchargé Qt SDK sous forme binaire du site officiel.