Обработка исключений не работает с Qt в Windows
я столкнулся со странной проблемой. А именно, Qt каким-то образом отключает обработку исключений в моей программе. Я не могу поймать какое-либо исключение, и когда я бросаю исключение, приложение аварийно завершает работу.
Я использую Qt 4.7.0 (32 бит) из Qt SDK v2010.05 В Windows 7 (64 бит), g++ (GCC) 4.5.1 из MinGW, NetBeans 6.9.1. Но я также проверил это с 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?
1 ответов
Я перенастроил и перекомпилировал Qt с флагом -exceptions
:D:\Qt10.05\qt>mingw32-make confclean && configure -exceptions && mingw32-make
и теперь все в порядке!
спасибо всем за помощь, особенно Нику D!
в любом случае, очень странно, что я построил Qt без этого флага. Я загрузил Qt SDK в двоичной форме с официального сайта.