Russian Qt Forum
Сентябрь 25, 2024, 18:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка исключений в слоте  (Прочитано 5631 раз)
ig
Гость
« : Октябрь 30, 2007, 07:11 »

Пусть у нас есть два класса.
Сигнал одного класса связан со слотом другого класса.
Если произвести отправку сигнала и генерацию исключения в слоте, то это исключение невозможно будет перехватить. Даже с помощью catch (...). Программа ОБЯЗАТЕЛЬНО завершится аварийно.
Причем, данное обстоятельство справедливо только для Release-варианта установки Qt. Если Qt установлена с отладочной информацией (debug), то все работает правильно, исключение перехватывается.
Проверялось на разных системах (Linux) с разными компиляторами.
Кто сталквался с таким или может попробовать у себя (любой тривиальный пример)?
Записан
Alex03
Гость
« Ответ #1 : Октябрь 30, 2007, 07:37 »

При создании release версии, ключик -no-exceptions не указывался в configure?
Записан
ig
Гость
« Ответ #2 : Октябрь 30, 2007, 07:54 »

Кстати, судя по всему, его указывают. Интересно, а зачем?
Например, http://www.sisyphus.ru/srpm/qt3/spec
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Октябрь 30, 2007, 10:11 »

Это всем известная проблема:

http://lists.trolltech.com/qt-interest/2006-02/thread00862-0.html
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Tonal
Гость
« Ответ #4 : Октябрь 30, 2007, 12:26 »

Код:
qt4.3.1\src\corelib\Makefile.Release:
CXXFLAGS      = -O3 -march=pentium3 -mtune=pentium3 -Wall -frtti -fexceptions -mthreads $(DEFINES)

Ну -march=pentium3 -mtune=pentium3 эт я сам в mkspecs добавил, а остальное само подставилось...
К чему бы это?

Да, если внимательно посмотреть справку по configure, можно найти:
Код:
    -no-exceptions ..... Disable exceptions on platforms that support it.
 *  -exceptions ........ Enable exceptions on platforms that support it.
...
    -no-rtti ........... Do not compile runtime type information.
 *  -rtti .............. Compile runtime type information.
Записан
Alex03
Гость
« Ответ #5 : Октябрь 31, 2007, 11:44 »

Кстати, судя по всему, его указывают. Интересно, а зачем?
4-ку и под виндой не пробовал а вот размер либы qt 3.x.x под линуксом с -no-exceptions раза в полтора меньше.

Ну и я бы не стал слать исключения из слотов. Как минимум Вы уже не гарантируете что некий сигнал получат все законнекченные к нему слоты (хотя Вам это может и не надо) .
Записан
Tonal
Гость
« Ответ #6 : Октябрь 31, 2007, 13:22 »

А я бы не стал отказываться от исключений, без очень серьёзных причин (наример компилятор/ос не поддерживает)
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Октябрь 31, 2007, 16:26 »

В Qt я никогда не использовал испускание исключений, да и смысла и везких причин я особого невижу
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Вячеслав
Гость
« Ответ #8 : Октябрь 31, 2007, 18:58 »

Смысл есть - чтоб каждый раз не проверять коды возврата из компонентов Подмигивающий

IMHO цепочка if'оф смотриться более громозко и нечитабельно чем try-catch....
Просто в Qt  надо еще пару телодвижений сделать - не забыть , сделать по варнингу Подмигивающий
Цитировать
"Qt has caught an exception thrown from an event handler. Throwing\n"
 "exceptions from an event handler is not supported in Qt. You must\n"
 "reimplement QApplication::notify() and catch all exceptions there.\n"
Чтоб приложение тихо не падало при появлении неучтенного исключения , и продумывать архитектуру приложения Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.112 секунд. Запросов: 23.