ErrorSys.prg

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 31. Mai 2013, 12:41 Uhr von Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „__FORCETOC__ == ErrorSys.prg == "Meine Programme haben keine Fehler, höchstens programmtechnische Ungenauigkeiten oder programmlogische Unschärfen." (Zitat…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen


ErrorSys.prg

"Meine Programme haben keine Fehler, höchstens programmtechnische Ungenauigkeiten oder programmlogische Unschärfen." (Zitat eines mir bekannten Programmierers)

Weil es immer wieder Situationen gibt, in denen der normale Programmverlauf nicht fortgesetzt werden kann, wurde in Clipper die ErrorSys.prg eingeführt. Zum Programmstart wird eine Funktion definiert, die bei Laufzeitfehlern aufgerufen wird, und in welcher der Programmierer die Möglichkeit hat, gezielt auf unterschiedliche Fehler zu reagieren.


Vorsicht, Loop

Anpassungen an die ErrorSys sollten vorsichtig und nur gut getestet vorgenommen werden. Wenn in der Fehlerbehandlung erneut ein Fehler auftritt, kommt man schnell in einen Loop, bis der Stack überläuft.

Beispiel: es soll ein Fehlerprotokoll geschrieben werden, aber die Protokolldatei kann nicht geöffnet werden (weil sie schon excluvi geöffnet ist, die erforderlichen Rechte fehlen, die Datei nicht angelegt werden kann etc.). Wird das nicht abgefangen, wird innerhalb der Fehlerbehandlung erneut die Fehlerbehandlung angestossen.


Der Master-Code

Unter \XppW32\Source\Sys findet sich der Quellcode zur ErrorSys.prg. Dieser Code kann angepasst und dann modifiziert in eigenen Programmen verwendet werden.


Aufbau der ErrorSys.prg

Es muss sichergestellt sein, dass bestimmte Punkte definiert sind:


ErrorSys()

Der Laufzeitstandard sieht vor, dass zu Programmbeginn die Funktion ErrorSys() aufgerufen wird. Wenn diese in keinem vom Programmierer definierten Modul vorhanden ist, wird die ErrorSys() aus dem zur Runtime gehörenden DLLs geladen, und wir bewegen uns auf dem Standard-Pfad.

Die Funktion ErrorSys() dient dazu, dass dem Laufzeitsystem mitgeteilt wird, welche Funktion sich um Fehler standardmässig kümmert (es besteht jederzeit die Möglichkeit, eine andere Funktion zuzuweisen):

Function ErrorSys()                             
   ErrorBlock({|oError| StandardEH(oError)})             
Return(.T.)

Diese Zuweisung registriert die Funktion StandardEH() als Standard Error Handler, und legt fest, dass ein Parameter erwartet wird, der bei Eval() angegeben werden muss.

Theoretisch kann der Standard Error Handler auch in einem anderen Programm definiert werden, es ist aber allgemein üblich, die Fehlerbehandlungsroutinen in einer Quelle zu hinterlegen.

StandardEH()

(Artikel ist noch in Arbeit)