Left Up Right Ablaufsysteme
Exceptions

Ausnahmen (engl. Exceptions)

Was ist das ?

Es ist ein Mechanismus zur strukturierten Behandlung von ungewöhlichen Sitiationen: (Beispiel C++)
try
{
   /* code */
   if(bedingung)
       throw Error(); 
}
catch(Error &ex)
{
   /* Behandlung */
}
Natürlich kann die Ausnahme in einer gerufenen Funktion/Methode vorkommen oder an mehreren Stellen. Dann wird der Code mit diesem Mechanismus wirklich übersichtlicher ...

Das Ablaufsystem muß auch Destruktoren von Objekten auf dem Stack aufrufen.

Design-Fragen

Nach IBM-DOKU und Divan Lectures Exception gibt es zwei Modelle der Ausnahmenbehandlung:
Termination Model
Wenn eine Ausnahme geworfen wurde, kehrt die Kontrolle nicht wieder zum Auswerfspunkt (throw point) zurück (so in C++,Java, Modula3)
Resumption-Modell
Die Ausnahmenbehandlung behandelt das Problem und kehrt dann wieder zum Auswurfspunkt zurück (PL/1)
Damit kann besser die Fehlerbehabung gemacht werden.
Die Implementierung ist aber sehr komplex.

Anwendung

Elhadad Kurs
beschreibt, wie man sicher für Ausnahmen programmiert.

Implementierung

lec37.pdf (Quelle)
skiziert 4 Implementierungen:
  • Extra Return Value / Transformation in lokale gotos
  • setjmp/longjmp
  • Table of Continuation
  • static Exception Tables
exceptions.txt (von hier)
beschreibt einfache auf setjmp/longjump beruhendes Macros für C
Vishal Kochhar : How a C++ compiler implements exception handling
Wie G++ exceptions behandelt
Aus einer Antwort auf den letztgenannten Artikel
Erkenntnisse aus der Analyse aus der g++-Implementierung
Versuch minimale Exception-Behandlung fuer C++ auf L4

Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber