Qt Exceptions, Использование исключений в Qt 4.7.0 |
Здравствуйте, гость ( Вход | Регистрация )
Qt Exceptions, Использование исключений в Qt 4.7.0 |
JuryS1806 |
2.10.2010, 21:38
Сообщение
#1
|
Студент Группа: Участник Сообщений: 93 Регистрация: 21.10.2009 Из: Нижний Новгород Пользователь №: 1168 Спасибо сказали: 9 раз(а) Репутация: 0 |
Здраствуйте, товарищи.
Столкнулся с такой проблемой. Сегодня установил Qt 4.7.0. и теперь не могу отлавливать Exception'ы в main. В общем это выглядит так:
И до версии 4.6.3 это срабатывало, но теперь нет, при том что exception'ы отлавливаются в любых функциях и классах, но вот не в main. Просто наработал столько, что сейчас во всех классах и методах прописывать try -> catch . Да и не нужно. Только вот бывают критические ошибки и хотелось бы их отловить в main. Спасибо за помощь ! |
|
|
Авварон |
2.10.2010, 23:05
Сообщение
#2
|
Студент Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: 0 |
Мне казалось, что эксепшны ловятся в цикле событий и там и помирают.
|
|
|
JuryS1806 |
2.10.2010, 23:10
Сообщение
#3
|
Студент Группа: Участник Сообщений: 93 Регистрация: 21.10.2009 Из: Нижний Новгород Пользователь №: 1168 Спасибо сказали: 9 раз(а) Репутация: 0 |
Мне казалось, что эксепшны ловятся в цикле событий и там и помирают. Они генерируются где угодно и потом начинают передаваться выше, до тех пор пока кто-нибудь их не отработает. К примеру, я даже в вызове какого-то класса заколочу try и как результат, в случае возникновения ошибки поймаю его. Вещь конечно тормознутая, но незаменимая. Я сейчас пересобрал проект с ключом DEFINES += No_Exception. Не знаю как. но Qt его съел и теперь программа вылетает, также игнорирует catch (...) в функции main(), но теперь сам Qt ничего не пишет, просто мол приложение завершено с кодом 0. И при этом exception'ы функций работают исправно. Все это подозрительно очень. Я думаю это баг QApplication. |
|
|
Алексей1153 |
3.10.2010, 6:39
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
[offtop]
JuryS1806, goto - зло! А если уж используешь, пользуйся правильно
[/offtop] |
|
|
JuryS1806 |
3.10.2010, 9:55
Сообщение
#5
|
Студент Группа: Участник Сообщений: 93 Регистрация: 21.10.2009 Из: Нижний Новгород Пользователь №: 1168 Спасибо сказали: 9 раз(а) Репутация: 0 |
Да хоть бы QMessageBox отработал, а то вылет и все тут. Я кстати говоря 4.6.0, 4.6.2, 4.6.3 перепробовал и везде одно и то же. И при том что судя по всему проблема не в Qt а в Linux. Под Windows это срабатывает изумительно. А под ubuntu нет.
Вот и не пойму в чем дело... |
|
|
kuzulis |
4.10.2010, 14:24
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
А под Linux эксепшены не канают. Забудьте про них вообще.
|
|
|
kwisp |
4.10.2010, 14:42
Сообщение
#7
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
kuzulis |
4.10.2010, 15:12
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата ??? а по подробнее можешь растолковать? Да я в подробности не вдавался, но по слухам в Linux лучше проверять возвращаемые значения. Да и везде где я видел код для Linux, я нигде (или оч редко) видел обработку исключений.. А вообще, почитать тут можно кое что (примерчик): http://www.visualdata.ru/blog/109-segv-signal.html |
|
|
kwisp |
4.10.2010, 15:19
Сообщение
#9
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
Да я в подробности не вдавался, но по слухам в Linux лучше проверять возвращаемые значения. ну товарищ это не серьезно. если ты сам генерируешь способ сообщения об ошибке, мало кому интересно как это у тебя будет возвращаемое значение или исключение. однако есть стандартные средства(stl к примеру), которые уже генерируют исключения и обрабатывать их надо. чем таким принципиальным функция линукс версия std::vector<Type>::at(int) отличается от виндовой версии? и там и там будет исключение std::out_of_range в случае выхода за пределы вектора. как собираешься сообщить об ошибке в конструкторе через возвращаемое значение? П.С. в статье нет ни слова про возвращаемые значения в случае ошибок. ключевая мысль статьи Цитата В данном примере рассмотрен вариант трансляции системных сигналов SIGSEGV и SIGFPE в стандартные исключения языка c++ для i386/gcc/linux. |
|
|
kuzulis |
4.10.2010, 15:27
Сообщение
#10
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата как собираешься сообщить об ошибке в конструкторе через возвращаемое значение? Хм.. Похожая тема и на prog.org.ru была. И там были примеры с исключениями в этом случае (и даже я тему создавал там такую) Но я бы проверил бы величину значения int и выставил бы в конструкторе какой-то флаг типа bool valid = false или еще как... И уже далее перед выполнением каких нибудь методов (тот.же .at(int)), я бы делал проверку на этот флаг и , соответственно, дальше уже бы решал что делать. -- т.е. у меня "парадигма" - всегда контролровать свои переменные принаписании кода, а не полагаться на исключения. ЗЫ: нашел тему: http://www.prog.org.ru/topic_13051_0.html Сообщение отредактировал kuzulis - 4.10.2010, 15:30 |
|
|
Текстовая версия | Сейчас: 5.12.2024, 6:52 |