Entwickler-Ecke

Sonstiges (Delphi) - Kann man alle Exceptions abfangen?


Shaky - Di 19.04.05 15:02
Titel: Kann man alle Exceptions abfangen?
Hi.

Ich habe ein Programm mit Haufenweise Unterprogrammen.
Das Programm soll ich verbessern. Ist von einem alten Angestellten.

Der hat fast ohne try except gearbeitet.

Wir würde gerne so ein Support Form erstellen.
Das soll halt immer erscheinen wenn ne Exception kommt.
z.B


Quelltext
1:
2:
3:
4:
5:
try
  bla:=10/0;
except
  Supportform.eshow(exception);
end;


Und dann soll der halt schreiben dürfen was er gemacht hat.
Dann soll eine Email an mich gehen mit Exception, Text und Zeile Unit in der er gerade ist.
Die Email ansich ist ansich kein Problem.
Ich denke wenn ich das überall hinkopiere ist nichts davon schwer.

Aber jetzt 2 Dinge.
Die 1.: Wie lese ich die Exception aus?
Die 2.: Kann ich das irgendwie so machen das der das try Except über das ganze Programm macht.
Weil nachträglich jetzt alle funktionen durchzugehen da brauche ich 3 Jahre für.

Wäre cool wenn ihr mir helfen könnt.
Oder wenn ihr sicher seid wenigstens schreibt. Nein geht auf keinen Fall oder so.

Big Thx


Shaky - Di 19.04.05 15:33

Habs schon durch IRC rausbekommen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := AppException;

end;

procedure TForm1.AppException(Sender: TObject; E: Exception);

begin
  Application.ShowException(E);
  Application.Terminate;
end;


Für alle die es interessiert.

Trotzdem Danke :)


jaenicke - Di 19.04.05 15:36

Selbst wenn es leicht möglich wäre, ist es eine sehr schlechte Idee mit try..except das ganze Programm zu pflastern.
Das setzt die Geschwindigkeit DRASTISCH herunter. Deshalb: So wenig wie irgend möglich aber so viel wie eben gerade nötig.

Zum Problem: Ich glaube es gibt Application.OnException, wo du die Analyse zentral durchführen kannst.

ABER: An den Stellen, wo wirklich was passieren kann, weil es nicht vermeidbar ist (z.B. Ein- / Ausgabe), sollte das abgefangen werden (entweder durch Analyse oder mit try..except), damit das Programm nicht instabil wird. Die Arbeit wirst du wohl leisten müssen...

edit: Dann hätt ich mir das ja sparen können...
VORHER suchen...