да, в потенциально опасных местах ставить try/catch
Ёлки, до фига мест получится...
Но ведь можно как-то и глобального перехватчика поставить? Или даже нужно поставить, наряду с перехватчиками в потенциально опасных местах? Ведь чего-то можно не предвидеть, или упустить из внимания. Вот тут глабальный и поможет, соберет информацию, позакрывает критические триды и т.п.
Что такое "потенциально опасные места"? Если вызываемый код генерирует исключения, то их, безусловно, нужно обрабатывать и ставить try-catch (как-то не привык использовать MS-специфичные аналоги).
Ну это я имел ввиду, что если я в качестве параметра получаю адрес массива данных, то можно предположить, что из-за какой-то ошибки этот адрес может оказаться "плохим". Ничего особо фатального тут нет, можно выдать пользователю сообщение и проигнорировать недействительный массив.
Или может произойти что-то более фатальное, не позволяющее работать дальше, или исключение может произойти там, где я и не подозревал. Вот тут, IMHO, выручит глобальный перехватчик, который не даст программе просто вывалится в десктоп, а скажет пользователю что-то разумное.
Исключения стоит обрабатывать всегда. Молча вываливаться по причине необработанного исключения - это просто невежливо со стороны программы. И традиционно учат обрабатывать их там, где их можно обработать. То есть, нужно уметь выделить тот уровень, на котором приложение компетентно обработать ошибку. Нужно ответить на вопрос: насколько ошибка является критичной, и какую часть операций не имеет смысла продолжать после сбоя.
Абсолютно справедливо! Поэтому я и хочу научиться правильно использовать эту технику. (Лучше очень, очень поздно, чем вообще никогда :-)
Может быть можно было бы сформулировать какие-нить "правила хорошего тона" для грамотного и корректного отлова ошибок?
К примеру, для программирования под Вижуал Студией правила такие:
1. В потенциально опасных местах использовать блоки __try/__except/__finally (или try/catch).
2. Установить глобальный перехватчик на все приложение, который будет собирать информацию, корректно возвращать ресурсы, правильно закрывать триды и т.п.
3. Разрабатывать приложение с учетом возможной необходимости незапланированного освобождения ресурсов. Т.е. предоставлять глобальному перехватчику нужные функции для освобождения памяти, закрытия тридов и т.п.
4. ...
Чего бы еще сюда дописать, или что бы скорректировать?