| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Хотелось бы разобраться с исключениями |
| Автор: Primordial 18.11.2013, 02:39 |
| Доброго времени суток! Перехожу от теории к практике и хотелось бы в первом приближении определиться с использованием исключений. Как я понимаю, разработка грамотного кода подразумевает следующее: 1. Если уже существует класс исключения, уместного в данной ситуации, необходимо использовать его. Например, ArgumentException, в случае, если передаваемые в метод аргументы по какой-либо причине не подходят и т.д. 2. Определять свои пользовательские классы исключений следует в случае, если подходящих встроенных не нашлось. (Как вообще определить когда и для чего вводить свои типы исключений? Как, например, отреагировать на то, что класс читающий конфиг не нашел или не смог открыть файл: каким-либо из встроенных или пользовательским?) 3. В случае если я ввожу свои типы исключений, для каждой возможной ошибки мне следует создать свой тип (Или же можно ограничиться одним, общим для какой-либо задачи типом? Например, все ошибки, которые могут возникнуть при чтении конфига, выбрасывать как исключения одного типа с соответствующими описаниями). Верны ли приведенные выше суждения? |
| Автор: Primordial 24.11.2013, 15:26 | ||
Тогда, быть может, вылавливать базовое исключение последним, после обработки всех ожидаемых типов ошибок и, поскольку не понятно в чем проблема, укладывать приложение? В свое время, когда я активно писал на Delphi, я заводил класс-предок исключений, скажем для бизнес-логики, в котором у меня было поле типа "строка" с уникальным идентификатором ошибки (использовался GUID). Т.о. я всегда мог отследить в каком месте кода возникло исключение посредством поиска по коду проекта. Разумеется, при наличии UI, пользователю показывалось осмысленное сообщение. Есть ли смысл делать под .net что-то похожее? Насколько такой подход распространен? |
| Автор: jonie 24.11.2013, 21:50 | ||
короче читать это: http://msdn.microsoft.com/en-us/library/ms229014%28v=vs.100%29.aspx (ранее было доступно в виде pdf) |
| Автор: dzaraev 25.11.2013, 06:54 | ||||||
Не скажу за всех, но я предпочитаю просто сохранять стек (свойство Exception.StackTrace), это даёт возможность не просто найти место выброса исключения, но и увидеть "историю" его появления.
Output:
|
| Автор: jonie 25.11.2013, 11:35 | ||
Уже давно люди придумали готовые логгер либы, вроде nlog-а, где формат вывода можно настроить не в коде 8-) Ну а при наличии реально проблем как я уже говорил - делайте Debugger.Break (например) - это позволит снять дамп, ну или Enviroment.FailFast после снятия дампа и записи в лог... |
| Автор: dzaraev 25.11.2013, 12:17 | ||
Спасибо, я в курсе. Если вы про черточки - это просто для примера )) Суть самого пример в том, что не нужен какой-то гуид, чтобы понять по логу - где случился фейл. |