DebugBuild (pragma & interface)
Implementiert ab Version | 2015.r1 |
---|
Mit dem Pragma DebugBuild wird der Compiler angewiesen die Kompilierung mit Informationen zur aktuellen Code-Zeile und -Datei durchzuführen. Hierfür werden global (einmalig) 4 Bytes im Arbeitsspeicher reserviert. Jede Zeile einer Anweisung im Luna-Source resultiert in zumeist mehreren Maschinenbefehlen. Der Compiler fügt für jede Zeile im Luna-Code vor der Ausführung Code ein um die Informationen zu aktualisieren. Eine Aktualisierung benötigt 4 Takte.
- #pragma DebugBuild true
Zur Abfrage ob DebugBuild aktiviert ist (0 = false), existiert folgende globale Konstante:
- DEBUGBUILD
Die aktuelle Zeile und Datei kann gelesen werden mit:
- word = DebugBuild.Row
- string = DebugBuild.File
Ausnahmen
Die Aktualisierung einer Code-Zeile wird automatisch ausgesetzt unter folgenden Bedingungen:
- Code in Exception-Handlern
- Code in asm-endasm
- Deklarationen bzw. Deklarationsblöcke wie „dim“, „struct“, „data“ usw.
- Befehlszeilen bei denen der erzeugte Maschinencode keinen komplexen Ausdruck enthält bzw. keine Exception auslösen kann, wie .z.B „nop“, „portb.1 = 1“, „else“, „endif“, „endproc“, „endfunc“, „return“ (ohne Parameter), „default“, „endselect“, „class“, „endclass“, „do“, „wend“, „next“, „halt()“ usw.
- Code-Zeilen welche DebugBuild.Row/File auslesen
Beispiel
#pragma DebugBuild true const F_CPU = 16000000 avr.device = atmega328p avr.clock = F_CPU avr.stack = 32 uart.baud = 19200 uart.recv.enable uart.send.enable dim m as MemoryBlock print 12;"debugbuild example" print 'allocate a memoryblock m = new MemoryBlock(16) 'force the exception by writing out of bounds m.byteValue(20) = 123 halt() Exception OutOfBoundsMemory ' print error message #if DEBUGBUILD print "*** Exception OutOfBoundsMemory: line ";str(DebugBuild.Row);", in file: '";DebugBuild.File;"' ***" #else print "*** Exception OutOfBoundsMemory ***" #endif EndException