Как справиться с исключениями в больших базах кода - PullRequest
3 голосов
/ 18 мая 2010

У меня большая база кода C #. Временами он выглядит довольно некорректно, и мне было интересно, есть ли быстрый способ улучшить поиск и диагностику проблем, которые происходят на клиентских ПК.

Самая насущная проблема заключается в том, что исключения возникают в программном обеспечении, перехватываются и даже сообщаются мне. Проблема в том, что к тому времени, когда они были обнаружены, первоначальная причина исключения была потеряна.

т.е. Если исключение было обнаружено в конкретном методе, но этот метод вызывает 20 других методов, и каждый из этих методов вызывает 20 других методов. Вы получаете картину, исключение нулевой ссылки невозможно выяснить, особенно если это произошло на клиентском компьютере.

В настоящее время я обнаружил некоторые места, где, как мне кажется, ошибки более вероятны, и поместил их непосредственно в свои блоки try catch. Это единственное решение? Я мог бы быть здесь долго.

Мне все равно, что исключение приведет к остановке текущего процесса (в любом случае, это всего лишь поток, а не основное приложение), но мне важно, чтобы исключения возвращались и не помогали с устранением неполадок.

Есть идеи?

Мне хорошо известно, что я, вероятно, задаю вопрос, который звучит глупо и может не дать однозначного ответа. Все равно какое-то обсуждение было бы хорошо.

1 Ответ

3 голосов
/ 18 мая 2010

Исключения поддерживают стек вызовов, который можно использовать для отслеживания источника исключения , если только исключение не было переброшено неправильно или проглотлено. Под первым я имею в виду что-то вроде:

try
{
    //...
}
catch ( Exception e )
{
    //do stuff with exception
    throw e;
}

Вместо:

try
{
    //...
}
catch ( Exception )
{
    //do stuff with exception
    throw;
}

Последний поддерживает стек вызовов, а первый - нет. В общем случае код должен перехватывать только те исключения, которые он планирует обработать, а не все исключения. Если код правильно спроектирован таким образом, то когда самый верхний уровень перехватывает исключение, вы должны иметь через стек вызовов метод, который запустил цепочку событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...