Implement and archive Phase 5 debugger
This commit is contained in:
@@ -127,7 +127,7 @@ Library-Symbole/Aufrufvertrag und der native Verbraucher-Nachweis stehen
|
||||
explizit in [PLAN.md, Phase 6](../PLAN.md). Ein umbenanntes TBC erfüllt
|
||||
keines der beiden Exportziele.
|
||||
|
||||
## Befehlsabdeckung nach Change 05
|
||||
## Befehlsabdeckung nach Change 06
|
||||
|
||||
Alle Referenzbefehle sind in ihrer Menüfolge vorhanden. Fachbefehle der
|
||||
folgenden Changes sind sichtbar deaktiviert und zeigen einen
|
||||
@@ -139,16 +139,16 @@ Output-Fokus unterbricht Ctrl+C sofort die Sitzung, ohne eine BASIC-Taste einzur
|
||||
| --- | --- | --- |
|
||||
| File | New/Open/Save Project, New Form/Module, Add/Remove File, Save File/As, Load/Save Text, Print (UTF-8-Datei), Shell, Exit | — |
|
||||
| Edit | Undo, Cut/Copy/Paste/Clear, New Sub/Function, Event Procedures | — |
|
||||
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus, Grid Lines, Output Screen | Next Statement: 06 |
|
||||
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus, Grid Lines, Output Screen, Next Statement | — |
|
||||
| Search | Find, Selected Text, Repeat Last Find, Change | — |
|
||||
| Run | Start/Restart/Continue/Pause, COMMAND$, wirksame Startdatei und beide Make-Dialoge | Native Erzeugung: Phase 6 |
|
||||
| Debug | Vollständiges Menü und Kürzelzuordnung, einschließlich F7/F8/F9/F10 und History | Watches, Watchpoints, Trace, History, Breakpoints, Break on Errors, Set Next Statement: 06 |
|
||||
| Debug | Breakpoints, Schritte, Calls, Watches/Watchpoints, Direktfenster, Trace/History, Break on Errors und Set Next Statement | — |
|
||||
| Options | Display, Set Paths, Right Mouse, Save, Syntax Checking einschließlich Zeilenprüfung | Kontext-Hilfe: 07 |
|
||||
| Window | New Window, Arrange All, Calls/Debug/Help/Immediate/Output/Project, aktive Codeliste, alle Fensterkürzel | Debug/Calls/Immediate-Inhalte: 06; Hilfeinhalt: 07 |
|
||||
| Window | New Window, Arrange All, Calls/Debug/Help/Immediate/Output/Project, aktive Codeliste, alle Fensterkürzel | Hilfeinhalt: 07 |
|
||||
| Designer Tools/Window | Vollständige Toolbox einschließlich Spin, Formliste, Color Palette, Menu Design Window | — |
|
||||
| Help | Vollständiges Menü, About und Help-Fensterrahmen | Index, Contents, Keyboard, Topic, Using Help, Tutorial: 07 |
|
||||
|
||||
Editor, inkrementelle Übersetzung, Ausführung und Formulardesigner sind umgesetzt. Die gesamte
|
||||
Editor, inkrementelle Übersetzung, Ausführung, Formulardesigner und Debugger sind umgesetzt. Die gesamte
|
||||
Phase-5-Abnahme erfolgt in Change 08.
|
||||
|
||||
## Programme ausführen
|
||||
@@ -384,3 +384,88 @@ benötigen weiter ein separates Textziel. Die Designer-Tests prüfen alle
|
||||
Klassen, Geometrie, Properties, Maus/Tastatur, Transaktionen, Ereignisse und
|
||||
Speicher-Roundtrips. Der CLI-Integrationstest erzeugt eine FRM über dieselben
|
||||
Designeraktionen und übersetzt sie mit dem echten `tbc build`-Prozess.
|
||||
|
||||
|
||||
## Debugger und Direktfenster
|
||||
|
||||
F9 setzt oder entfernt eine Haltepunktmarke in der physischen Quelldatei.
|
||||
Für Includes zuerst **View → Included File** öffnen; die schreibgeschützte
|
||||
Gesamtansicht Included Lines ist kein eindeutiger Haltepunktort. Bei mehrfach
|
||||
verwendeten Includes gehört die Marke zum ausgewählten Projektmodul.
|
||||
**●** am Fensterrand bezeichnet einen gebundenen Haltepunkt, **○** eine
|
||||
inaktive Marke. Textänderungen führen die Marken mit; eine gelöschte
|
||||
Anweisung deaktiviert ihre Marke. Beim Start werden nur ausführbare Grenzen
|
||||
der neuen Kompilatrevision gebunden. **Clear All Breakpoints** entfernt alle.
|
||||
Ein Zeilenbreakpoint hält vor der ersten ausgeführten Anweisung der Zeile;
|
||||
mehrere durch Doppelpunkt getrennte Anweisungen können einzeln geschritten werden.
|
||||
|
||||
| Aktion | Taste / Menü | Verhalten |
|
||||
| --- | --- | --- |
|
||||
| Continue | F5 | Führt die angehaltene Anweisung einmal aus; ein späterer Schleifendurchlauf kann erneut halten. |
|
||||
| Single Step | F8 | Nächste BASIC-Anweisungsgrenze, auch innerhalb eines Aufrufs. |
|
||||
| Procedure Step | F10 | Nächste Anweisung im ursprünglichen Frame nach dem Aufruf, einschließlich Rekursion und GOSUB; Breakpoints und Fehlerhalte haben Vorrang. |
|
||||
| Run to Cursor | F7 | Temporäres Laufziel; ein anderer Halt oder das Ende beendet den Cursorlauf. |
|
||||
| Next Statement | View → Next Statement | Zeigt den tatsächlichen aktuellen Ausführungsort. |
|
||||
| Calls | Window → Calls | Aufrufkette mit Prozedur und Quelldatei/-zeile. Maus oder Pfeile wählen einen Inspektionsrahmen; der aktive VM-Frame bleibt unverändert. |
|
||||
|
||||
**Add Watch**, **Instant Watch / Shift+F9** und **Watchpoint** nehmen einen
|
||||
BASIC-Ausdruck entgegen. **Window → Debug** zeigt Werte mit Typen und
|
||||
Diagnosen pro Eintrag. Delete Watch/Delete All Watch löschen Definitionen;
|
||||
das Debug-Fenster bearbeitet keinen Quelltext. Lokale Variablen, Arrays und
|
||||
UDT-Felder beziehen sich auf den in Calls gewählten erreichbaren Frame.
|
||||
`Modul!Variable` qualifiziert einen globalen Namen, beispielsweise
|
||||
`Daten!satz.Preis` oder `Daten!preise(2)`. Arithmetik und Konvertierungen
|
||||
stammen aus demselben Frontend und Bytecode wie normale BASIC-Anweisungen.
|
||||
|
||||
Automatische Watches sind nebenwirkungsfrei: Literale, Operatoren, vorhandene
|
||||
Variablen, Array-/Feldzugriffe, String-/Mathematik-Intrinsics, FORMAT$, Arraygrenzen
|
||||
sowie ERR/ERL sind erlaubt. Benutzerprozeduren, RND, Eingabe-/Datei-/Uhrfunktionen
|
||||
und andere nicht als rein nachgewiesene Aufrufe liefern eine Diagnose.
|
||||
Ein noch nicht initialisiertes Array wird durch einen Watch nicht angelegt.
|
||||
Solche Aufrufe sind über das Direktfenster möglich. Watchpoints benötigen eine
|
||||
numerische BASIC-Bedingung und halten an der nächsten Anweisungsgrenze, an der
|
||||
sie wahr ist. Continue überspringt die aktuelle Prüfung einmal; bleibt die
|
||||
Bedingung wahr, kann die folgende Grenze erneut halten. Ein fehlerhafter
|
||||
Eintrag löst keinen Halt aus.
|
||||
|
||||
**Window → Immediate** öffnet das Direktfenster. Im Break-Modus führt Enter
|
||||
PRINT, Zuweisungen, Prozeduraufrufe und ERROR aus; Doppelpunkte verbinden
|
||||
mehrere Anweisungen. Vor der Ausführung wird das gesamte Kommando übersetzt.
|
||||
Syntax-/Typfehler verändern weder Variablen noch Fortsetzungspunkt.
|
||||
Erfolgreiche Kommandos kehren zur ursprünglichen Pause zurück. PRINT ist im
|
||||
Direktfenster und im gemeinsamen Programmbildschirm sichtbar. Zuweisungen,
|
||||
BYREF-Aufrufe und normale Laufzeitnebenwirkungen bleiben wirksam. Laufzeitfehler
|
||||
nutzen die bestehenden Handler und RESUME-Regeln; unbehandelte Direktfehler
|
||||
werden angezeigt, während die ursprüngliche Pause erhalten bleibt.
|
||||
|
||||
Run → Pause/Ctrl+Break unterbricht auch ein laufendes Direktkommando. Ein
|
||||
wartender Prozeduraufruf bleibt fortsetzbar; seine Programmeingaben werden über
|
||||
Window → Output zugestellt. F5 setzt zunächst das noch aktive Kommando fort;
|
||||
nach dessen Abschluss setzt ein weiteres F5 das ursprüngliche Programm fort.
|
||||
END/SYSTEM beenden die Sitzung, RUN startet über den normalen Sitzungsreset.
|
||||
Direktcode hat den Quellort `<Immediate>` und wird nie im Projekt gespeichert.
|
||||
|
||||
**Trace On** verfolgt die aktuelle Quellstelle. **History On** hält höchstens
|
||||
1.024 tatsächlich begonnene Anweisungen; die ältesten Einträge fallen heraus.
|
||||
Shift+F8/Shift+F10 navigieren zurück/vorwärts. Die Meldung **HISTORIE** bezeichnet
|
||||
nur eine historische Quellstelle: Watchwerte gehören weiterhin zum aktuellen
|
||||
Halt. Variablen, Dateien, Uhr und andere Nebenwirkungen werden nicht zurückgesetzt.
|
||||
Ein Neustart verwirft Frameauswahl, Verlauf, Instant-Watch und alte Werte,
|
||||
erhält Watchdefinitionen und bindet Breakpoints neu.
|
||||
|
||||
**Break on Errors** hält nach der Handlerwahl und nötigem Stack-Unwinding vor
|
||||
der ersten Handleranweisung. Die Anzeige nennt Fehlernummer, Ursache und
|
||||
Handlerziel; Continue führt den Handler einmal aus. ERR/ERL und RESUME behalten
|
||||
ihren normalen Vertrag. Unbehandelte Programmfehler beenden die Sitzung mit
|
||||
Fehlerdiagnose; unbehandelte Direktfehler sind ausdrücklich als solche sichtbar.
|
||||
|
||||
**Set Next Statement** ist nur an einer freien Anweisungsgrenze im aktiven
|
||||
Frame zulässig. Das Ziel muss ausführbar sein und denselben Kontroll- und
|
||||
Schleifenkontext besitzen. Fremde Frames, Eintritt in Handler/GOSUB-Bereiche,
|
||||
aktive GOSUB-/Fehlerbehandlung, Warteoperationen und ein aktives Direktkommando
|
||||
werden mit Begründung abgewiesen. Die Prüfung erfolgt vor jeder Änderung.
|
||||
Ein erlaubter Sprung führt keine übersprungenen Anweisungen aus.
|
||||
Cursorziele setzen den unveränderten Quellstand der pausierten Sitzung voraus;
|
||||
nach Änderungen zuerst neu starten. F5 kann weiterhin nach ausdrücklicher
|
||||
Auswahl das gekennzeichnete alte Kompilat fortsetzen; seine Watches verwenden
|
||||
die ursprünglichen Symbole und Slots.
|
||||
|
||||
Reference in New Issue
Block a user