Hallo,
zum Abschnitt "
Wieso kommt Delphi mit manchen Exceptions nicht klar?" im Tutorial
Exceptions ist mir folgendes aufgefallen:
Man kann den Debugger doch dazu bringen
an der richtigen Stelle stehen zu bleiben und die
Exception korrekt anzuzeigen bzw. auszuwerten, indem man den Code wie folgt erweitert:
normal (der Debugger Zeigt die Stelle der
Exception nicht korrekt an):
Delphi-Quellcode:
Application.Initialize;
Foo();
// in der Procedure Foo() der unit2 wird durch 0 geteilt => Exception
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
besser (hier bleibt der Debugger dort stehen wo die
Exception verursacht wird, also in Unit2.pas Zeile xy!):
Delphi-Quellcode:
try
Application.Initialize;
Foo();
// in der Procedure Foo() der unit2 wird durch 0 geteilt => Exception
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
except // durch diese Zeilen werden auch Exceptions vor Application.Run korrekt behandelt!
Application.HandleException(Application);
//
end;
Was meint die Delphi-Gemeinde, kann man das so machen, sollte man das so machen, oder birgt das Gefahren?
Nachtrag: das "try
except" sorgt dafür, dass mir die richtige Stelle angezeigt wird. (Ein "try finally" reicht nicht aus.)
Das
Application.HandleException(Application) sorgt dann noch für die bekannte MessageBox.
mfg,
Tobi