Мне недавно пришлось разработать дополнительный модуль для существующего сервиса, разработанного коллегой. Он поставил попробовать/поймать блок в основной рабочей функции для ловли всех unhadled исключения, которые пузырились до этого уровня, протоколирование их вместе с стека трассировки информации и т.д.:Как реализовать обработку исключений верхнего уровня?
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
Хотя это делает программу очень стабильной (в «вряд ли сбой»), я ненавижу, потому что, когда я тестирую свой код, я не вижу исключений, вызванных этим. Конечно, я могу посмотреть журнал исключений и посмотреть, есть ли новые записи, но я очень предпочитаю прямую обратную связь с тем, чтобы получить исключение в момент его броска (с указателем на правильную строку в коде, пожалуйста).
Я удалил этот верхний уровень, попробовав/поймаю хотя бы пока я все еще кодировал и тестировал. Но теперь моя задача закончена, и я должен решить, чтобы вернуть ее на выпуск или нет. Я думаю, что я должен это сделать, потому что это делает сервис более стабильным, и все дело в том, что он работает в фоновом режиме, не требуя никакого наблюдения. С другой стороны, я прочитал, что нужно называть только особые исключения (как в IoException
), а не в общем Exception
.
Каков ваш совет по этой проблеме?
Кстати, проект написан на C#, но меня также интересуют ответы для языков не .NET.
См. Также http://stackoverflow.com/questions/576532/is-dying-is-awesome-preferred – Brian