Wenn du RAISE erneut auslöst, dann empfehle ich per AT die ursprüngliche Fehlerposition mitzugeben, vor allem wenn RAISE in einer anderen Methode ausgeführt wird,
denn beim Debuggen macht es keinen Spaß, wenn man nicht mehr sieht wo der Fehler eigentlich war, und auch beim Error-Logging wäre es gut.
Statt nur
raise;
ein
raise Exception.Create(E.Message) at ExceptAddr;
,
aber natürlich ist es Blöd, wenn die Exceptionklasse verloren geht, da somit anschließend
E IS
und auch
on E: AndererExceptionTyp do
nicht mehr möglich sind.
Delphi-Quellcode:
raise (E.ClassType).Create(E.
Message) at ExceptAddr;
raise Exception.Create(
Exception(ExceptObject).
Message) at ExceptAddr;
...
Natürlich gibt es noch weitere Infos, welche verloren gehen, wie z.B. E.ErrorCode bei Windows.Exceptions.
Oder ihr spielt etwas mit InnerExceptions/OuterExceptions rum.
Das Selbe gilt übrigens auch, wenn man die
Exception-Erzeugung in eine Fuunktion verlagert, denn wen interessiert die Stelle wo das RAISE ausgelöst wurde, wo ja eigentlich die Stelle wichtig ist, wo MyCreateException aufgerufen wurde. (PS: TList und Co. machen sowas, für ihre Exceptions)
Delphi-Quellcode:
procedure MyCreateException(S:
string);
begin
WriteErrorLog(S);
raise Exception.Create(S) at ReturnAddr;
end;