Обработка исключений не работает с Qt в Windows

У меня странная проблема. А именно Qt каким-то образом отключает обработку исключений в моей программе. Я не могу поймать никаких исключений, и когда я генерирую исключение, приложение вылетает.

Я использую Qt 4.7.0 (32 бит) из Qt SDK v2010.05 в Windows 7 (64 бит), g ++ (GCC) 4.5.1 из MinGW, Но я также проверил это с помощью g ++ 3.4.5 (также из MinGW) и Qt Creator 2.0.1 - такое же странное поведение.

Например (простейший случай):

#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;
}

Когда я выполняю указанную выше программу, я получаю этот результат :

До исключения

Это приложение запросило среду выполнения необычным способом.
За дополнительной информацией обращайтесь в службу поддержки приложения.

Я пытался добавить флаг "-fexceptions" в g ++, но он ничего не изменил.

Когда я не использую Qt, все в порядке:

#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;
}

Вывод:

До исключения
Произошло исключение

Кто-нибудь знает, почему так происходит и как это исправить? Имеет ли это какое-либо отношение к типу метода обработки исключений (SJLJ или Dwarf-2), который использовался при сборке Qt?

9
задан revers 10 November 2010 в 23:03
поделиться