Я столкнулся со странной проблемой. А именно, 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?
-no-exceptions
. Попробуйте перенастроить и переделать Qt SDK. - person Nick Dandoulakis   schedule 11.11.2010