REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Fehlerbehandlung in Visual Basic und Exception Handling in C++

Fehlerbehandlung in Visual Basic

und Exception Handling in C++

  1. Behandlung von Laufzeitfehlern in Visual Basic

Fehler, die beim Ausführen eines Programmes, also zur Laufzeit, auftreten, heißen Laufzeitfehler. Oft liegen die Ursachen für einen derartigen Fehler außerhalb des Programmes, beispielsweise wenn eine Datei auf der Festplatte nicht gefunden wird oder eine Diskette nicht gelesen werden kann.

On Error { Resume Next | GoTo { Programmzeile | Sprungmarke | 0 } } 44152pvv42ypc4b

Mit dieser Anweisung wird die Fehlerbehandlung festgelegt. Durch die Anweisung on Error GoTo kann eine Fehlerbehandlungsroutine aktiviert bzw. deaktiviert und die Position dieser Routine innerhalb der Funktion bzw. Prozedur angegeben werden.

Wenn ein Fehlerbehandler aktiviert wurde, bewirkt jeder Laufzeitfehler einen Sprung zur Fehhlerbehandlungsroutine. Der Fehlerbehandler wird in dem Moment aktiv, in dem ein Laufzeitfehler aufgefangen wurde, und bleibt es, bis in ihm eine der Anweisungen Resume, Exit Sub oder Exit Function ausgeführt wird.

Durch die Anweisung On Error GoTo 0 wird die Fehlerbehandlung deaktiviert.

Tritt ein Fehler in einer Prozedur ohne Fehlerbehandlung auf, wird die aufrufende Prozedur durchsucht, wenn es auch dort keine Fehlerbehandlung gibt, wird in deren aufrufender weitergesucht usw., bis entweder eine Routine gefunden oder die oberste Ebene erreicht wird. Durch ein Resume wird dann die fehlerverursachende Prozedur wieder aufgerufen, durch ein Resume Next wird das Programm bei der Anweisung nach dem fehlerverursachenden Prozeduraufruf fortgesetzt. vp152p4442yppc



Err-Objekt: liefert Fehlercode

Resume: wiederholt die fehlerverursachende Anweisung

Resume Next: setz die Programmausführung bei der Anweisung nach der fehlerverursachenden fort

Es gibt grundsätzlich 3 Möglichkeiten der Fehlerbehandlung:

- Keine Behandlung

Bewirkt im Fall eines Laufzeitfehlers einen Programmabbruch.

- Verzögerte Behandlung

On Error Resume Next: Die Standardfehlerbehandlung wird bis zum Ende der jeweiligen Prozedur bzw. bis zu anderen On Error... - Anweisungen ausgeschaltet. Mit Hilfe des Err-Objekts kann festgestellt werden, ob und welche Fehler aufgetreten sind.

- Sofortige Behandlung

On Error GoTo Fehlerbehandler : Ein Fehlerbehandler wird aktiviert und bleibt bis zum Ende der jeweiligen Prozedur wirksam. Bei einem Fehler wird zum Code an der Sprungmarke Fehlerbehandler verzweigt. Diese Sprungmarke befindet sich sinnvollerweise am Ende der Prozedur, vor ihr wird die Prozedur dur Exit Sub bzw. Exit Function verlassen.

Beispiel:

Sub Beispielprozedur()

On Error GoTo Fehler

...

Exit Sub

Fehler:

...

Resume Next

End Sub

  1. Ausnahmebehandlung in C++ (Exception Handling)

Unter einer Ausnahme versteht man eine Fehlersituation. Ausnahmebehandlung dient zum Behandeln von Fehlern, die nicht an jener Programmstelle behandelt werden können oder sollen, wo sie auftreten.

throw beim Erkennen eines Fehlers wird eine Ausnahme ausgeworfen

try Programmteile werden überwacht, ob bei ihrer Abarbeitung Ausnahmen auftreten

try-Blöcke sind Anweisungen und können geschachtelt werden

Direkt nach jedem try-Block muß mindestens ein Ausnahme-Behandler (catch-Block) folgen

catch Der Ausnahmebehandler reagiert bei Ausnahmen in einem von try überwachten Programmteil

Der Code eines catch-Blocks kann nur mittels throw erreicht werden

Beispiel:

void funktion()

{

...

if (fehler) throw 1;

...

}

void main()

{

...

try

{

...

funktion();

}

catch(int)

{

cout << “Fehler!“;

}

...

}

Wenn innerhalb des try-Blocks bzw. in einer dort aufgerufenen Funktion mit throw eine Ausname vom Typ Integer ausgeworfen wird, so wird der Ausnahmebehandler catch(int) ausgeführt, der die Ausnahme abfängt.

Unterschiedliche Ausnahme-Typen

Nach einem try-Block folgt normalerweise eine Liste von mehreren verschiedenen catch-Blöcken.

Welcher catch-Block beim Auftreten einer Ausnahme ausgeführt wird, wird durch den Typ der

Ausnahme festgelegt, d.h. den Typ des Ausdrucks hinter dem Schlüsselwort throw, dem Typ des ausgeworfenen Objekts.

Ausgeworfene Objekte können beliebigen Datentyen angehören, auch benutzerdefinierte (Klassen) sind möglich.

Das ausgeworfenene Objekt wird als Parameter an den passenden catch-Block übergeben und kann im catch-Block verwendet werden (catch (int &i))


Fortsetzen des Programms nach einer Ausnahme

Nach dem Auswerfen einer Ausnahme wird zum nächsten passenden catch-Block verzweigt. Es wird nach dem „innersten“ try-Block der noch nicht beendet wurde gesucht und seine Behandler-Liste nach einem passenden catch-Block durchsucht. Wenn keiner vorhanden ist, wird die Suche im umschließenden try-Block fortgesetzt usw. Wird kein passender catch-Block gefunden, so wird das Programm abgebrochen.

Möglichkeiten für einen passender catch-Block:

  • Typ des ausgeworfenen Objekts stimmt exakt mit der catch-Typ überein

  • catch-Typ ist eine Basisklasse des ausgeworfenen Objekts

  • Es wurde kein catch-Typ angegeben: catch(...)

Die Behandler-Liste eines try-Blocks wird von vorne nach hinten durchsucht, bis ein passender Behandler gefunden wird, bei mehreren passenden wird nur der erste in der Liste aktiviert.

Wenn ein passender Ausnahmebehandler gefunden und abgearbeitet wurde, wird das Programm nach der Behandler-Liste fortgesetzt.

Es gibt keine Möglichkeit, zur Auswurfstelle zurückzukehren.

Fehlerbehandlungsklassen

Mit einem catch können mehrere Auswurfobjekte abgefragt werden. Wenn das ausgeworfene Objekt ein Objekt einer abgeleiteten Klasse ist, wird die Fehlerbehandlungsroutine der Basisklasse durchgeführt. So kann mit dem selben catch (der Basisklasse) auf mehrere Auswurfsobjekte der abgeleiteten Klassen abgefragt werden.

Beispiel:

class Ausnahme {

const char *text;

public:

Ausnahme (const char *s) { text=s; }

const char *Text () { return text; }

};

class Fehler_X : public Ausnahme {

public:

Fehler_X () : Ausnahme (“Fehler X aufgetreten!“) {}

};

class Fehler_Y : public Ausnahme {

public:

Fehler_Y () : Ausnahme (“Fehler Y aufgetreten!“) {}

};

void main()

{

try {

...

try {

...

if (x==-1) then throw Fehler_X();

if (y>999) then throw Fehler_Y();

}

catch (Fehler_X &f) {

...

cout << f.Text << endl;

}

}

catch (Ausnahme &a) {

cout << a.Text << endl;

}

}







Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen