powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Исключения: за и против
8 сообщений из 158, страница 7 из 7
Исключения: за и против
    #34383981
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFFTOPIC:
На shell используя kill - trap
можно реализовать механизм обработки ошибок, подобный обработке исключений.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34384396
roman10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе, может быть можно и проигнорировать ошибку.
Например, при сбое диска записать на другой.
Ну дык этой сбой сначала нужно зафиксировать. Так что никакого игнорирования :).

White OwlА наверх всегда уходит одна единственная ошибка: "плохой пакет". Следующий уровень уже решает повторить попытку посылки пакета или сообщить выше о потере связи
Ну так в чем проблема? Ловим исключение и повторяем попытку. К вопросу исключения vs код возврата это уже не имеет отношение. Это во-первых.

А во-вторых, принимая решение о том, кидать ли исключения или юзать код возврата, следует учитывать, насколько существеннен этот сбой для работы алгоритма. Если мы пишем текстовый редактор, и сохраняем файл на диск, нам все равно, что случилось с диском, главное - что запись невозможна. В этом случае следует кидать исключения. Если же мы пишем драйвер, то с его точки зрения сбой при записи - одна из возможных и ожидаемых ситуаций, и реакция на каждуй из них уже составляет часть реализуемого алгоритма. Поэтому в этом случае более естественно использовать код возврата.

Собственно говоря, исключения и сущевтуют для того, чтобы упростить обработку ошибок по первому сценирию. Никто не говорит о том, что они должны полностью заменить коды возврата.


White OwlГую надо обрабатывать только два типа ошибки - нет ошибки и обрыв связи.
Почему же? Гую в праве обрабатывать любой тип ошибки, все зависит от поставленной задачи. Для этого и существует иерархия объектов исключений. Для приложений, ориентированных на "обыного" пользователя, ловим все подряд с помощью catch(exception&). Для специалистов, вводим более гранулярную обработку, с отдельным обработчиком на каждый тип.

White OwlНо если ты сильно хочешь - можешь конечно сообщать гую о всех пакетах с неверной контрольной суммой или с потеряным хвостом
Именно что сообщаем максимум инофрмации. Для самого пользователя или инженера техподдержки.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34385016
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded White OwlА представь что мы вызываем foo() из какой-нибудь чужой библиотеки, а потом однажды обновили эту самую чужую библиотеку и теперь foo() новой версии выдает больше (или вообще другие) ошибки чем в предыдущей версии. В варинте с enum в качестве кода возврата компилятор мне сразу накидает варнингов про все места где я использовал эту функцию, но не обновил работу с ней.
Попробуй повторить это с исключениями.

И не подумаю. У меня полнаяя сборка идет на Sun'e часа полтора (без тестов), потом еще неделю логи разбирать? Не могу себе позволить сие удовольствие. ээээ... А что, инкрементальную компиляцию уже отменили? Откуда неделя на разбор логов компилятора?
make clean & make all
И получаешь лог ошибок одного модуля. Исправил - make all получаешь ошибки другого модуля.
А иначе тебе остается только надеятся на то, что там в библиотеке ничего серьезного не поменялось и она полностью совместима снизу-вверх.

blinded White OwlНо все таки, может мне кто-нибудь элегантно решить задачку перехвата недокументированых исключений?
Ну это примерно тоже что и поиск незадукоментированного кода возврата. В общем случае не решаемо, при наличии отладочной информации в модуле - с помощью отдачикаНеверно. В общем случае оно как раз решаемо. Я уже показывал как решается задача отлова недокументированого кода возврата, можно повторить синтаксис решения одни-в-один (обернуть каждую функцию в свой собственный try/catch блок) и точно так же ловить известные и неизвестные исключения, но это уже не будет работа в стиле исключений.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34386773
Фотография hell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Беда в том еще, что исключения нужно обрабатывать всегда. А код возврата - нет.

Поэтому мы и встречаем каждый день злобные сообщения "Unhandled exception...."
...
Рейтинг: 0 / 0
Исключения: за и против
    #34386919
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще-то, если ошибка возникает и не обрабатывается – это ахтунг
...
Рейтинг: 0 / 0
Исключения: за и против
    #34387301
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
ээээ... А что, инкрементальную компиляцию уже отменили? Откуда неделя на разбор логов компилятора?
make clean & make all
И получаешь лог ошибок одного модуля. Исправил - make all получаешь ошибки другого модуля.
А иначе тебе остается только надеятся на то, что там в библиотеке ничего серьезного не поменялось и она полностью совместима снизу-вверх.

Нет конечно не отменили.Только это возможно в идеальном варианте. Когда изначально код доводился до блеска, а у меня чужого добра навалом, да и сам не святой. В такой ситуации на warning и не смотришь. Да и живем на нескольких компиляторах, что для одного в порядке вещей, для другого warning.
Да и объем кода достаточно большой, а времени нет, все новые доработки требуют...:(
blinded White OwlНо все таки, может мне кто-нибудь элегантно решить задачку перехвата недокументированых исключений?
Ну это примерно тоже что и поиск незадукоментированного кода возврата. В общем случае не решаемо, при наличии отладочной информации в модуле - с помощью отдачикаНеверно. В общем случае оно как раз решаемо. Я уже показывал как решается задача отлова недокументированого кода возврата, можно повторить синтаксис решения одни-в-один (обернуть каждую функцию в свой собственный try/catch блок) и точно так же ловить известные и неизвестные исключения, но это уже не будет работа в стиле исключений.[/quot]
Ну хорошо перехватили мы какое-то исключение, что с ним делать? Все равно программе предстоит падать, если исключение неизвестно мы не знаем тяжести его последствий и продолжать работу опасно... Теперь начинаем разборку
1) исключение сгенерировано кодом написаным нашей командой, ну тогда оно должно наследоваться от одного класса и содержать информацю для локализации места в котором его сгенерили. имя файла, строка кода. А кто сгенерирует что-то иное получит штраф к з/п
2) исключение сгенерировано сторонним кодом. Единственное что можно, если отнаследовано от std:exception попросить у него what() может чего и скажет и перейти к п 3
3) Смоделировать ситуацию и методом половинного деления найти причину.
Отметим что вы по всей видимости имеете дело с открытым кодом, где проблему можно решить копанием в исходниках. У меняже ситуация хуже - используются коммерческие библиотеки.
Все равно чтобы доказать неправоту автора придется делать тестовый пример... У нас уже набор всяческих тестов накопился. Приходит тебе новая версия, берешь и запускаешь...
...
Рейтинг: 0 / 0
Исключения: за и против
    #34388055
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedа у меня чужого добра навалом, да и сам не святой. В такой ситуации на warning и не смотришь. Да и живем на нескольких компиляторах, что для одного в порядке вещей, для другого warning.Фи! А я иногда специально прогоняю код через несколько разных компиляторов чтобы увидеть все возможные варнинги и исправить их.
Кстати, по моим наблюдениями гнусь самая тщательная с этой точки зрения :)

blindedНу хорошо перехватили мы какое-то исключение, что с ним делать? Все равно программе предстоит падать, если исключение неизвестно мы не знаем тяжести его последствий и продолжать работу опасно...Да, но падать можно красиво, а можно с грохотом :)

blinded2) исключение сгенерировано сторонним кодом. Единственное что можно, если отнаследовано от std:exception попросить у него what() может чего и скажет и перейти к п 3В том то и дело что "может чего и скажет". А если не скажет? Тогда копаться, копаться и копаться. А коды возврата локализованы по определению. Если поймал что-то - уже с самого начала видишь место где ошибка была и сразу переходишь к пункту три.

blindedОтметим что вы по всей видимости имеете дело с открытым кодом, где проблему можно решить копанием в исходниках. У меняже ситуация хуже - используются коммерческие библиотеки.
Все равно чтобы доказать неправоту автора придется делать тестовый пример...В данном случае это неважно. В любом случае чтобы доказать неправоту автора надо делать тестовый пример. В открытой библиотеке это чуть проще сделать, но не намного.
...
Рейтинг: 0 / 0
Исключения: за и против
    #34388233
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай закончим, все равно ма друг другу ничего не докажемю Ты белый, пушистый с нимбом и крыльями, я темный с копытами, хвостом и рогами. Никому это уже не интересно...
...
Рейтинг: 0 / 0
8 сообщений из 158, страница 7 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Исключения: за и против
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]