![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
JuryS1806 |
![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 93 Регистрация: 21.10.2009 Из: Нижний Новгород Пользователь №: 1168 Спасибо сказали: 9 раз(а) Репутация: ![]() ![]() ![]() |
Здраствуйте, товарищи.
Столкнулся с такой проблемой. Сегодня установил Qt 4.7.0. и теперь не могу отлавливать Exception'ы в main. В общем это выглядит так:
И до версии 4.6.3 это срабатывало, но теперь нет, при том что exception'ы отлавливаются в любых функциях и классах, но вот не в main. Просто наработал столько, что сейчас во всех классах и методах прописывать try -> catch . Да и не нужно. Только вот бывают критические ошибки и хотелось бы их отловить в main. Спасибо за помощь ! |
|
|
![]() |
kwisp |
![]()
Сообщение
#2
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
JuryS1806 |
![]()
Сообщение
#3
|
![]() Студент ![]() Группа: Участник Сообщений: 93 Регистрация: 21.10.2009 Из: Нижний Новгород Пользователь №: 1168 Спасибо сказали: 9 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо за Ваше активное участие в теме !
К сожалению, без эксцепшенов не обойтись и никакие тут int значения не помогут. Вот например я сейчас разбросал программу на 87 библиотек, каждая ~ весит по 2 Мб, половина из них OpenCascade. Так вот, чтобы передать int например из Foundation и проследить до самого верха, при этом одни и те же функции вызываются из разных классов и т.д. и т.п... Вообще, в Windows отрабатываются exception'ы и в main, в Linux везде, кроме main. Почему не знаю, но оставил и там и + добавил exception'ы везде где можно... А в общем код следующий: Раскрывающийся текст #include <QApplication> #include "mainwindow.h" #include "ExceptionHead.h" //void loadModules(QSplashScreen*) { } ; int main (int argc, char** argv) { QApplication app(argc, argv); /* QSplashScreen splash(QPixmap(":/Visual3D/Splash/Resurs/Load.png")); splash.show(); Q_INIT_RESOURCE(Visual3D); QLabel lbl("<H1><CENTER>Ready!</CENTER></H1>"); loadModules(&splash); splash.finish(&lbl); */ //QDir::setCurrent(QCoreApplication::applicationDirPath()); QString resdir; QString translatorPath; #ifdef WNT //Настройки для Windows const QString initdir = QCoreApplication::applicationDirPath(); resdir = initdir + "/src/Resource"; translatorPath = initdir+"/src/messages/Ru_ru.qm"; #else //Настройки для Linux resdir = "/opt/Visual3D/bin/src/Resource"; translatorPath = "/opt/Visual3D/bin/src/messages/Ru_ru.qm"; #endif qputenv("CSF_ResourcesDefaults",resdir.toAscii()); qputenv("CSF_PluginDefaults",resdir.toAscii()); QTranslator* translator = new QTranslator; // создаем переводчик translator->load(translatorPath); // загрузка файла qt_*.qm* app.installTranslator(translator); // устанока переводчика MainWindow* w = new MainWindow(); w->setWindowTitle(QString::fromUtf8("Графический редактор")); w->setWindowIcon(QPixmap(":/Visual3D/icons/Resurs/MainWindow.png")); QString myArgument = argv[1]; if (myArgument.isEmpty()) w->Init(); w->showMaximized(); if (!myArgument.isEmpty()) { if (!w->InitArguments(argv[1])) //Здесь будут открываться файлы и если будет исполнен макрос и он будет завершен //командой quit(), тогда будет установлено свойство MainWindow -> disable //и соответственно Exception'ы не будут отрабатываться. //Также exception'ы не будут отрабатываться при автозапуске макроса. { w->Init(); w->showMaximized(); } } if (w->isEnabled()) { QString msgHead = QString::fromUtf8("Критическая ошибка"); QString runagainMsg = QString::fromUtf8(" В процессе работы возникла критическая ошибка. " "Сейчас будет предпринята попытка восстановить " "рабочее состояние программы. " "В случае неудачи рабочие файлы будут автоматически " "открыты при следующем запуске программы."); Runagain: try { app.exec(); } catch (Standard_AbortiveTransaction) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 1. Прерванная транзакция.</b>")+runagainMsg); goto Runagain; } catch (Standard_ConstructionError) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 2. Ошибка построения.</b>")+runagainMsg); goto Runagain; } catch (Standard_DimensionMismatch) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 3. Несоответствие измерения.</b>")+runagainMsg); goto Runagain; } catch (Standard_DimensionError) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 4. Ошибка измерения.</b>")+runagainMsg); goto Runagain; } catch (Standard_DivideByZero) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 5. Деление на ноль.</b>")+runagainMsg); goto Runagain; } catch (Standard_NullObject) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 6. Нулевой объект.</b>")+runagainMsg); goto Runagain; } catch (Standard_ImmutableObject) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 7. Неизменный Объект.</b>")+runagainMsg); goto Runagain; } catch (Standard_MultiplyDefined) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 8. Повторный заголовок.</b>")+runagainMsg); goto Runagain; } catch (Standard_NegativeValue) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 9. Отрицательная величина.</b>")+runagainMsg); goto Runagain; } catch (Standard_NoMoreObject) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 10. Больше нет объектов.</b>")+runagainMsg); goto Runagain; } catch (Standard_NoSuchObject) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 11. Нет такого объекта.</b>")+runagainMsg); goto Runagain; } catch (Standard_NullValue) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 12. Нулевое значение.</b>")+runagainMsg); goto Runagain; } catch (Standard_OutOfRange) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 13. Вне диапазона.</b>")+runagainMsg); goto Runagain; } catch (Standard_RangeError) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 14. Ошибка диапазона.</b>")+runagainMsg); goto Runagain; } catch (Standard_TypeMismatch) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 15. Несоответствие типов.</b>")+runagainMsg); goto Runagain; } catch (Standard_DomainError) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 16. Ошибка области.</b>")+runagainMsg); goto Runagain; } catch (Standard_NotImplemented) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 17. Невозможно осуществить.</b>")+runagainMsg); goto Runagain; } catch (Standard_Overflow) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 18. Перегрузка.</b>")+runagainMsg); goto Runagain; } catch (Standard_Underflow) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 19. Недогрузка.</b>")+runagainMsg); goto Runagain; } catch (Standard_NumericError) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 20. Числовая ошибка.</b>")+runagainMsg); goto Runagain; } catch (Standard_OutOfMemory) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 21. Нехватает памяти.</b>")+runagainMsg); goto Runagain; } catch (Standard_ProgramError) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 22. Ошибка программы.</b>")+runagainMsg); goto Runagain; } catch (Standard_TooManyUsers) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Ошибка № 23. Слишком много пользователей.</b>")+runagainMsg); goto Runagain; } catch (...) { QMessageBox::critical(0,msgHead,QString::fromUtf8("<b>Неизвестная ошибка.</b>")+runagainMsg); goto Runagain; } } return 0; } и теперь все эти exception'ы распихал по программе... Тестирую, ищу где мог пропустить.... |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 27.6.2025, 23:35 |