resolver, Исключения. |
Здравствуйте, гость ( Вход | Регистрация )
resolver, Исключения. |
spumer |
13.7.2011, 21:51
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 28.3.2011 Пользователь №: 2546 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте.
При попытке подкинуть кривой хостнейм, программа вылетала с крит. ошибкой. Затем я начал отлавливать это исключение и пытаться завершить процесс более-менее спокойно. Но к сожалению это приводит к отказу приложения и система его закрывает.
|
|
|
Iron Bug |
13.7.2011, 22:18
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
скорее всего, у тебя resolver.resolve(query) возвращает пустой итератор, а ты его не проверяешь, да ещё и пытаешься использовать. по вполне понятным причинам программа падает.
попробуй сделать что-то типа
Сообщение отредактировал Iron Bug - 13.7.2011, 22:41 |
|
|
spumer |
13.7.2011, 22:50
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 28.3.2011 Пользователь №: 2546 Спасибо сказали: 0 раз(а) Репутация: 0 |
скорее всего, у тебя resolver.resolve(query) возвращает пустой итератор, а ты его не проверяешь, да ещё и пытаешься использовать. по вполне понятным причинам программа падает. попробуй сделать что-то типа
К сожалению не помогло, попробовал даже через стандартную фишку записи ошибки:
Результат тот же. Когда идет запись ошибки в переменную, крит. вылета нет, все как при try/catch. При нормальном хосте все отлично работает |
|
|
Iron Bug |
13.7.2011, 23:13
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
в примерах везде ловится std::exception.
(например, http://www.gamedev.net/blog/950/entry-2249...boostasio) может, у тебя просто не установлены флаги для отлова эксепшнов? под какую систему собираешь и чем? Сообщение отредактировал Iron Bug - 13.7.2011, 23:14 |
|
|
spumer |
13.7.2011, 23:22
Сообщение
#5
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 28.3.2011 Пользователь №: 2546 Спасибо сказали: 0 раз(а) Репутация: 0 |
в примерах везде ловится std::exception. (например, http://www.gamedev.net/blog/950/entry-2249...boostasio) может, у тебя просто не установлены флаги для отлова эксепшнов? под какую систему собираешь и чем? Windows 7. VS 2008 Express. |
|
|
Iron Bug |
14.7.2011, 7:40
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
попробуй поставить флаг /EHsc и ловить std::exception, как в ссылке, которую я привела последней. либо /EHa и тогда заработает catch(...). в венде если флаги не стоят, она тупо ничего не делает при стандартных эксепшнах. можно поэкспериментировать с флагами эксепшнов.
прочитать про всё это барахло можно тут, например: http://msdn.microsoft.com/en-us/library/1d...5(v=vs.80).aspx Сообщение отредактировал Iron Bug - 14.7.2011, 7:40 |
|
|
spumer |
14.7.2011, 14:19
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 28.3.2011 Пользователь №: 2546 Спасибо сказали: 0 раз(а) Репутация: 0 |
Iron Bug, Спасибо. Буду читать материал по ссылкам. Как разберусь, отпишусь либо сюда, либо в новый топик, если этот умрет.
|
|
|
Litkevich Yuriy |
14.7.2011, 18:49
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
spumer |
16.7.2011, 22:15
Сообщение
#9
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 28.3.2011 Пользователь №: 2546 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Iron Bug |
17.7.2011, 0:16
Сообщение
#10
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
у меня под линюксом вот такой код
работает нормально. то есть, буст выбрасывает эксепшн типа boost::system::system_error и всё отрабатывает в catch. линкуется это всё с библиотекой boost_system и обязательно с многопоточностью (в венде это флаг компилера). ещё можешь проверить, что у тебя не завалялись где-нибудь разные версии библиотек, если они называются одинаково. в венде конфликты библиотек - обычное дело. но в бусте вроде библиотеки содержат версию и это не должно быть проблемой. Сообщение отредактировал Iron Bug - 17.7.2011, 0:18 |
|
|
Текстовая версия | Сейчас: 23.4.2024, 23:57 |