Мне нужно обернуть Trace.TraceError внутри try / catch?

Я использую System.Diagnostics.Trace # TraceError внутри try / catch для отслеживания ошибок. Глядя на реализацию TraceError, похоже, что ошибки от слушателей на самом деле не обнаруживаются. Означает ли это, что я должен написать код, как показано ниже, чтобы избежать распространения ошибок из журнала на вызывающего абонента:

catch (Exception e) {
    try {
        Trace.TraceError(e);
    } catch {
        // Do nothing
    }
}

person oldbam    schedule 25.07.2014    source источник


Ответы (1)


Trace.TraceError не задокументирован генерировать исключения, поэтому catch это не нужно. Даже если задокументировано создание исключений, вы никогда не должны catch создавать исключения и ничего не делать.

Пусть возникает исключение, только тогда у вас будет шанс найти, что не так.

См. Почему попробовать {...} наконец-то {...} хорошо ; попробовать {...} поймать {} плохо?

person Sriram Sakthivel    schedule 25.07.2014
comment
You should never catch an exception and do nothing - Совершенно не согласен. Если всплывающее исключение не имеет никакого значения, зачем его всплывать? Если по какой-то причине ваша подсистема ведения журнала выйдет из строя, следует ли вывести из строя все приложение? Следует ли предупреждать пользователя? Скорее всего, нет! В этом случае подавите исключение и позвольте приложению продолжить выполнение своей работы. - person Philip Pittle; 25.07.2014
comment
@PhilipPittle Давай. Это общий совет, о котором следует помнить. Вот почему я связал связанный с этим вопрос. Как вы сказали, правила могут быть изменены в зависимости от сценария :) Кстати, зачем подавлять ошибки? Я лучше исправлю это в коде, если это можно сделать .. - person Sriram Sakthivel; 25.07.2014
comment
никогда не говори никогда :). Я согласен, что лучше всего делать что-то за исключением. Но это требуется не во всех случаях. - person Philip Pittle; 25.07.2014
comment
Я хочу подавить исключения, поскольку в противном случае они могут распространиться на конечного пользователя. Кроме того, могу ли я положиться на чью-то документацию, чтобы иметь надежный код? Что, если парень забыл о документировании исключений? Как я уже сказал, я не видел try / catch в реализации Trace - person oldbam; 25.07.2014
comment
Почти 95% методов .net не имеют try / catch, потому что они не хотят подавлять исключения. Вы можете положиться на документацию msft, поскольку это делаем мы. Я никогда не видел, чтобы они забывали задокументировать какие-либо исключения. Если метод / класс работает не так, как описано в документации, то это ошибка. Вы можете сообщить об этом здесь. - person Sriram Sakthivel; 25.07.2014