Показать сообщение отдельно
  #1  
Старый 02.11.2010, 22:47
mirt steelwater mirt steelwater вне форума
Прохожий
 
Регистрация: 17.10.2010
Сообщения: 35
Репутация: 10
Радость Отлавливание исключений в своих классах

При реализации своих классов необходимо качественно отлавливать возможные ошибки. Желательно, чтобы в сообщениях об ошибке было указано - в каком исполняемом модуле (имя dll или exe), в каком логическом модуле (имя unit-a), в каком классе и в каком методе класса возникло исключение. Также желательно передавать при этом в конструктор исключения минимум информации - например, только ссылку на экземпляр класса - self. Остальные параметры должны быть опциональны. Кроме того, желательно предусмотреть возможность указывать уникальный идентификатор в каждое исключение, для чего хорошо подходит GUID.
Вот этот модуль умеет все это делать.

использовать это просто:

interface

{$M+}
TMyClass = class
public
procedure MyMethod;
end;
{$M-}

implementation

procedure TMyClass.MyMethod;
begin
try
...
except on E: Exception do
raise EClass.Create ([self,'MyMethod','Ошибка моего метода!',E],
['{F2BAAC2B-2617-4FC2-BEF1-F1F71D33DD19}']);
end;
end;

при возникновении исключения в этом методе мы увидим что-то вроде:

{F2BAAC2B-2617-4FC2-BEF1-F1F71D33DD19}
Project1.exe::Unit1::TMyClass.MyMethod :
Ошибка моего метода! :
ESomeError

удобно также, что данный способ дает возможность использовать вложенность исключений.

жду критики и предложений
Ответить с цитированием