Недавно мне пришлось разработать дополнительный модуль для существующей службы, разработанный моим коллегой. Он поместил блок try / catch в основную рабочую функцию для перехвата всех необработанных исключений, которые поднимаются до этого уровня, регистрации их вместе с информацией трассировки стека и т. Д.:
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
Хотя это делает программу очень стабильной (например, «маловероятно, что произойдет сбой»), я ненавижу ее, потому что, когда я тестирую свой код, я не вижу вызванных им исключений. Конечно, я могу посмотреть журнал исключений и посмотреть, есть ли новые записи, но я очень предпочитаю прямую обратную связь с получением исключения в момент его создания (с курсором в правой строке кода, пожалуйста).
Я удалил этот верхний уровень try / catch, по крайней мере, пока я все еще кодировал и тестировал. Но теперь моя задача выполнена, и я должен решить, вставлять ли ее обратно для релиза или нет. Я думаю, что мне следует это сделать, потому что это делает сервис более стабильным, и весь смысл в том, что он работает в фоновом режиме без какого-либо надзора. С другой стороны, я читал, что нужно вызывать только определенные исключения (как в IoException), а не в общем Exception.
Что вы посоветуете по этому поводу?
Кстати, проект написан на C #, но меня также интересуют ответы для языков, отличных от .NET.