Название: РЕШЕНО Перехват исключений в Qt 4.7.1 Отправлено: Prm от Февраль 26, 2011, 18:58 Долгое время использовали с напарником Qt 4.5.0 и MinGW c GCC 3.4.5. Недавно обновились до Qt 4.7.1 и MinGW c GCC 4.5.2. Появилась проблема. В проектах активно используем исключения. Теперь при генерации исключений ни один catch их не ловит. В чем может быть причина??? Поиск по форуму результатов не дал. Qt собрана с флагом -exceptions. Выручайте, други.
Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: Prm от Февраль 27, 2011, 22:12 Неужели исключения так не популярны? Что, никто их не пользует???
Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: alexman от Февраль 27, 2011, 22:35 Их сами qt-ники используют крайне редко!
Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: BRE от Февраль 27, 2011, 22:48 Неужели исключения так не популярны? Что, никто их не пользует??? Ну ты же сам понимаешь, что ситуация не штатная.Попробуй сделать маленький тестовый пример, который будет показывать проблему и выложи его. А все желающие попробуют у себя и скорее всего посоветуют какое-то решение. ;) Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: Sancho_s_rancho от Февраль 27, 2011, 22:52 Неужели исключения так не популярны? Что, никто их не пользует??? Хех. Меня учили не говорить "за всех", поэтому скажу только за себя.Их использует Страуструп :) И об их преимуществах написано у него. Типа: 1) Коды ошибок плохо, потому что при большой вложенности передавать их вверх неудобно. Вот исключения рулят. Там стек вызовов раскручивается и все в шохоладе. 2) Обработать код ошибки можно забыть. А неперехваченное исключение всегда даст о себе знать. 3) Это просто круто. У меня немного другое мнение 1) Если вложенность большая - значит это как-то надо исправлять, т.к. или спроектирована программа хреново или просто она "повзрослела". В любом случае спагетти из исключений изящества не добавит. 2) Т.к. мне неизвестно определение "исключительной" ситуации, то и поделить все ситуации на рабочие и "исключительные" я не могу. Единственное. что приходит в голову на тему "исключительности" - это когда оператор new память выделить не может. 3) Это не очень круто т.к. бинарник растет на треть(привет смартфонам) и добавляется немного тормозов. По версии Страуструпа - это из-за кривых компиляторов. Но ссылки на прямые компиляторы он не дает. 4)Раньше программисты использовали механизм исключений для посылки сообщений, но сейчас для этого есть механизмы сигнал-слот. Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: Prm от Февраль 27, 2011, 23:37 Ожила тема :) Во вложении простейший пример генерации исключения.
Применять исключения или нет - дело каждого. Вопрос сейчас не в этом. Основной вопрос - почему qt4.7.1 не может отловить исключение. Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: BRE от Февраль 27, 2011, 23:44 У меня все нормально.
Получил в консоль: Цитировать Qt has caught an exception thrown from an event handler. Throwing и получил QMessageBox:exceptions from an event handler is not supported in Qt. You must reimplement QApplication::notify() and catch all exceptions there. Цитировать Exception catched!!! [...]$ gcc --version gcc (GCC) 4.5.2 20110127 (prerelease) Copyright (C) 2010 Free Software Foundation, Inc. Это свободно распространяемое программное обеспечение. Условия копирования приведены в исходных текстах. Без гарантии каких-либо качеств, включая коммерческую ценность и применимость для каких-либо целей. [...]$ qmake --version QMake version 2.01a Using Qt version 4.7.1 in /usr/lib Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: Prm от Февраль 27, 2011, 23:50 Это уже интересно. В линуксе значит работает. Я собираю прогу под WinXP. Мои версии ПО:
Код:
Какие могут быть предположения??? Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: Prm от Март 01, 2011, 07:26 Скомпилировал Qt 4.7.1 старым MinGW c gcc 3.4.5. Программа заработала, исключения ловятся. Ключи сборки MinGW:
Код: d:\Soft\MinGW\bin>gcc -v Если сравнивать две сборки MinGW, видим разницу в ключе --enable-sjlj-exceptions. Качнул за ночь MinGW 4.5.1, собранный с ключом --enable-sjlj-exceptions. В течении дня пересоберу Qt и попробую скомпилить прогу. Название: Re: Перехват исключений в Qt 4.7.1 Отправлено: Prm от Март 01, 2011, 10:17 Пересобрал Qt 4.7.1 MinGW gcc 4.5.1, перекомпилил прогу - все заработало как надо. Выдержка из readme к компилятору:
Код: *** DW2 vs. SJLJ unwinding *** Название: Re: РЕШЕНО Перехват исключений в Qt 4.7.1 Отправлено: iukash от Апрель 28, 2011, 13:05 А где скачать MinGW с ключом --enable-sjlj-exceptions? Дайте ссылку пожалуйста!
Название: Re: РЕШЕНО Перехват исключений в Qt 4.7.1 Отправлено: iukash от Апрель 28, 2011, 21:53 Все, нашел, пошел Qt пересобирать! :)
|