Exception-EndException
Exceptions dienen der Fehlersuche direkt im Programm. Fehlerbehandlung bei Auftreten einer Exception.
Syntax:
- Exception ExceptionName
- Programmcode
- [Raise]
- EndException
| ExceptionName | Beschreibung | Raise |
|---|---|---|
| DivisionByZero1) | Division durch Null in einer Kalkulation aufgetreten | ja |
| OutOfBoundsMemory | MemoryBlock Objektgrenze verletzt | ja |
| NilObjectException | Objekt auf das sich der Aufruf bezieht existiert nicht | ja |
| OutOfSpaceMemory | Arbeitsspeicher voll, Objekt kann nicht alloziert werden | nein |
| StackOverflow | Der Stack ist übergelaufen. Siehe auch.. | nein |
Wird ein Exceptionhandler im Programmcode verwendet, werden die jeweiligen Debugfunktionen aktiviert. Die Zugriffsgeschwindigkeiten werden z.T. reduziert und es wird zusätzlicher Speicherplatz im Flash benötigt.
Sofern möglich (siehe Tabelle), kann mit dem Befehl Raise die Programmausführung fortgesetzt werden. Andernfalls wird das Programm nach Auftreten einer Exception durch eine Endlosschleife angehalten (HALT).
Beispiel
' Initialisierung
[..]
' Hauptprogramm
dim a as byte
dim m,m1 as MemoryBlock
m.New(100) 'MemoryBlock allozieren mit 100 Bytes
a=m.ByteValue(100) 'Löst Exception aus, da außerhalb der Objektgrenzen
'(Zugriff hier nur 0-99 erlaubt, Offsets sind Nullbasiert)
m1.ByteValue(0)=1 'Zuweisung zu einem nicht existierendes Objekt
m1.New(3000) 'mehr Speicher allozieren als vorhanden ist (Programm wird angehalten)
do
Loop
' Exception-Handler definieren (Aktiviert die Überwachungsfunktionen)
Exception OutOfSpaceMemory
' Fehlermeldung ausgeben
Print "*** Exception OutOfSpaceMemory ***"
EndException
Exception OutOfBoundsMemory
' Fehlermeldung ausgeben
Print "*** Exception OutOfBoundsMemory ***"
Raise ' Programm fortführen
EndException
Exception NilObjectException
' Fehlermeldung ausgeben
Print "*** Exception NilObjectException ***"
Raise ' Programm fortführen
EndException
Exception StackOverflow
' Fehlermeldung ausgeben
Print "*** Exception StackOverflow ***"
EndException
1)
Ab Version 2015.r1