![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Обычно обрабатываю исключения в блоках try ... catch. Проверяю, как правило, динамическое выделение памяти, чтение/запись в файлы, обращение к массивам со сложной индексацией.
И вот возник у меня вопрос. Что ещё следует проверять на возникновение исключений, где они ещё наиболее вероятны? Советы типа "проверять надо всё" не принимаются, поскольку, когда в блок try {...} заключён большой кусок кода, довольно-таки проблематично определить, где именно произошло исключение и как его лучше обработать. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 2 Всего: 5 |
нет, ответ "проверять надо все", как раз таки неправелен. Проверять нужно то и только в тех местах где эти исключения возможно могут появится.
Например, если, происходит преобразование строки в число, (в билдере, при неправильном формате, происходит исключение) то и нужно в этом месте поставить только исключение преобразования строки в число. -------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Саттер говорит, что можно забить на проверку выделения динпамятии вот по такой причине (это не из Саттера, но суть та же, и cut'n'paste'ить это легче, чем набирать кусок из книги)
+1 Это сообщение отредактировал(а) Mayk - 19.1.2006, 10:59 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 2 Всего: 5 |
Where is? -------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Слегка оффтоп: если в блок try..catch заключен большой кусок кода, то этот кусок кода просится на рефакторинг - например, выделение в отдельную функцию. Исключения надо ловить на том уровне логики, где приложение знает, как обработать исключительную ситуацию, а не обязательно в ближайших окрестностях потенциального источника исключений. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Так я об этом и спрашиваю. Что за места? Кроме преобразования строки в число пока ничего нового не услышал Добавлено @ 12:00
Не только в таких случаях. Например следует ловить хотя бы для того, чтобы в случае чего корректно завершить прогу, если не получается обработать исключение и ошибка критична для программы. Хотя, конечно, завершение - это худший вариант. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
А как это противоречит предыдущей цитате? Исключения, которые не идентифицируются , ловятся на самом внешнем упровне логике, где приложение знает, что с ним делать - выдать в лог "FATAL ERROR" и корректно завершить приложение -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
А проверять нужно не там, где исключение может проявиться и не все, а там и только те, обработав которые можно выполнить некие разумные действия, кроме завершения приложения. А все остальное нужно перехватывать на самом верхнем уровне.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
согласен с Vyacheslav'ом. обработку исключений надо делать из двух соображений: по возможности вокруг того места, где оно может возникнуть, и по возможности там, где можно по поводу возникшего исключения что-то сделать.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |