Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - Fehler-Behandlung in FreeBASIC

Referenz-Navigation

 

Behandlung von Laufzeitfehlern

FreeBASIC kann Laufzeitfehler auf folgende Arten behandeln:

Wichtig: Verursacht ein FreeBASIC-Programm einen allgemeinen Schutzfehler (etwa durch Zugriffe außerhalb des eigenen Speicherbereichs), wird die Programmausführung sofort vom Betriebssystem beendet. Ein solcher Fehler lässt sich mit den Fehlerbehandlungsmethoden ("Error handling") von FreeBASIC nicht abfangen und benutzerdefiniert behandeln.


Standardfehlerbehandlung

Das Standard-Verhalten von FreeBASIC ist, bei einem Fehler die Variable ERR zu setzen und fortzufahren.

' Im Folgenden wird davon ausgegangen, dass die angegebene Datei xzxwz.zwz
' nicht existiert. Dann wird nämlich in ERR ein Fehler vermeldet.
Open "xzxwz.zwz" For Input As #1
Print Err
Sleep

Das Programm hält, obwohl die Datei nicht existiert, nicht an, sondern setzt die Variable ERR und macht weiter. Der Fehler könnte in der nächsten Zeile ausgewertet werden.

Achtung: Bei der Verwendung von PRINT wird ERR anschließend auf 0 zurückgesetzt. Gegebenenfalls sollte ihr Wert zuvor in eine andere Variable kopiert werden.

Einige Ein- und Ausgabe-Routinen wie OPEN und PUT können als Funktion eingesetzt werden und geben eine Fehlernummer zurück. Wenn kein Fehler aufgetreten ist, wird 0 zurückgegeben.

Print Open ("xzxwz.zwz" For Input As #1)
Sleep



QB-ähnliche Fehlerbehandlung

Wenn mit den Schaltern -e, -ex oder -exx kompiliert wurde, wird vom Programm erwartet, dass eine QB-ähnliche Fehlerbehandlung geschieht. Erfolgt keine Fehlerbehandlung, stoppt das Programm mit einem Fehler.

Wichtig: Wenn die QB-ähnliche Fehlerbehandlung benutzt wird, muss der Programmierer sicherstellen, dass ALLE Fehlermöglichkeiten abgefangen werden. Beispielsweise erzeugt BefehlsreferenzeintragGETMOUSE einen Fehler, wenn der Cursor das aktuelle Fenster verlässt.

On Error Goto Ooops
Open "xzxwz.zwz" For Input As #1
On Error Goto 0
Sleep
End

Ooops:
Print Err
Sleep
End

BefehlsreferenzeintragON ERROR setzt eine Fehlerbehandlungsroutine, die vom Programm aufgerufen wird, wenn ein Fehler gefunden wurde.
ON ERROR GOTO 0 schaltet diese Fehlerbehandlung ab.
In den BefehlsreferenzeintragDialektformen -lang qb und -lang deprecated steht außerdem der Befehl BefehlsreferenzeintragRESUME zur Verfügung, um nach einem Fehler wieder mit der Programmausführung fortzufahren.

Wenn keine Fehlerbehandlungsroutine benutzt wird und ein Fehler auftritt, stoppt das Programm und sendet eine Fehlermeldung an die Konsole.

Aborting program due to runtime error 2 (file not found)

(Abbruch wegen Laufzeitfehler 2 (Datei nicht gefunden))

Die "globale" Fehlerbehandlungsroutine kann wie in QB am Programmende stehen. Bei ON LOCAL ERROR kann eine lokale Fehlerbehandlung auf BefehlsreferenzeintragProzedurebene erfolgen. Dazu muss das Unterprogramm (BefehlsreferenzeintragSUB oder BefehlsreferenzeintragFUNCTION) eine Codesequenz zur Fehlerbehandlung besitzen, die im Fehlerfall mittels GOTO angesprungen wird.

Declare Sub foo
foo
Sleep

Sub foo
    Dim filename As String
    filename = ""
    On Local Error Goto Ooops
    Open "" For Input As #1
    Print "Kein Fehler"
    On Local Error Goto 0
    Exit Sub
  Ooops:
    Print "Fehler " & Err & " in Function " & *Ermn & " in Zeile " & Erl
End Sub

Erläuterung:
Beim Schalter -e muss die Fehlerbehandlungsroutine das Programm beenden, unabhängig vom verwendeten Dialekt.
Wird das Programm mit der BefehlsreferenzeintragCompileroption -ex und -lang qb compiliert, kann die Error-Handling-Routine mit der Anweisung BefehlsreferenzeintragRESUME (wiederholt die letzte Anweisung, die den Fehler hervorrief) oder RESUME NEXT (fährt mit der nächsten Anweisung fort) die Programmausführung nach Behandlung des Fehlers fortsetzen.
Wird compiliert, ohne eine Compileroption zur Fehlerbehandlung zu verwenden, dann wird der Fehler ignoriert.


Fehlernummern

FreeBASIC kennt folgende Laufzeit-Fehlercodes:

Nr.MeldungÜbersetzung
0No errorkein Fehler
1Illegal function callungültiger Funktionsaufruf
2File not found signalDatei nicht gefunden*
3File I/O errorDatei-Ein-/Ausgabe-Fehler
4Out of memoryZu wenig Speicher
5Illegal resumeungültiges RESUME
6Out of bounds array accessArray-Indexüberschreitung
7Null Pointer AccessNullpointer-Zugriff
8No privilegesfehlende Berechtigungen
9interrupted signalUnterbrechung
10illegal instruction signalungültige Anweisung
11floating point error signalGleitkommafehler
12segmentation violation signalSpeicherzugriffsfehler
13Termination request signalBeendigungsanforderung
14abnormal termination signalunnormale Beendigung
15quit request signalAnfragesignal beendet
16return without gosubRETURN ohne GOSUB
17end of fileDateiende

*) Der Laufzeitfehler 2 (File not found) kann auch auftreten, wenn z. B. mit BefehlsreferenzeintragENCODING "UTF-8" eine Datei geöffnet werden soll, die nicht UTF-8-codiert ist oder bei der das Externer Link!Byte Order Mark (BOM) nicht gesetzt ist.

Ein Bereich für Benutzer-Fehlermeldungen ist nicht vorgegeben. Wenn also BefehlsreferenzeintragERROR benutzt wird, um einen benutzerdefinierten Fehlercode zu setzen, ist es vernünftiger, hohe Werte zu benutzen, um Überschneidungen mit den eingebauten Fehlermeldungen zu vermeiden, falls die obige Liste zukünftig einmal erweitert werden sollte.

Siehe auch:
BefehlsreferenzeintragON ERROR, BefehlsreferenzeintragERR (Funktion), BefehlsreferenzeintragERFN, BefehlsreferenzeintragERMN, BefehlsreferenzeintragERROR, BefehlsreferenzeintragFehlerbehandlung, Debugging


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 19.10.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 09.02.2013 von Redakteurnemored gespeichert.
  Versionen Versionen