Поиск необработанных исключений - .NET - PullRequest
4 голосов
/ 26 сентября 2011

У меня довольно большое решение .NET, которое плохо обрабатывает исключения. Первоначальные авторы имели в виду, ловя определенные типы исключений, а не базовый класс исключений, однако, это привело к тому, что я могу больше подсчитывать места, где исключения типа генерируются, но нигде не отлавливаются, и делают программное обеспечение ненадежным. Как я могу выполнить анализ кода, чтобы определить, где в решении может быть выдан тип исключения, но он не перехватывается?

Ответы [ 4 ]

2 голосов
/ 26 сентября 2011

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

Как это сделать, зависит от платформы (WebForms, MVC, WinForms, WPF, ...?)

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

1 голос
/ 26 сентября 2011

Вот как я с ними справляюсь.В моем Program.cs в методе Main я настроил обработку событий.После этого вы добавляете в эти события код, который хотите.

Application.ThreadException += Form1_UIThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

РЕДАКТИРОВАТЬ: Это для не-веб-приложений.

0 голосов
/ 26 сентября 2011

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

Взгляните

0 голосов
/ 26 сентября 2011

Любое исключение, которое не было обнаружено, не обрабатывается. Хорошей новостью является то, что вы можете подписаться на это событие AppDomain.CurrentDomain.UnhandledException.

Это обрабатывает любое выброшенное исключение, которое не было перехвачено.

Как я могу выполнить анализ кода, чтобы определить, где в решении Тип исключения может быть сгенерирован, но не перехвачен?

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

...