## Purpose

Stellt quellgenaues Debuggen innerhalb derselben TBVM bereit, einschließlich Ausführungssteuerung, Variablenbeobachtung, Direktfenster und nachvollziehbarer Fehlerhalte.

## ADDED Requirements

### Requirement: Dateigenaue Breakpoints
F9 und Toggle Breakpoint SHALL Haltepunkte nach Modul, physischer Quelldatei und Zeile setzen und entfernen. Nur ausführbare Anweisungsgrenzen SHALL binden; nicht bindbare Marken SHALL sichtbar als inaktiv gelten. Clear All SHALL alle entfernen. Continue SHALL die angehaltene Anweisung genau einmal ausführen, bevor derselbe Halt erneut ausgelöst werden kann.

#### Scenario: Zwei Includes mit gleicher Zeile
- **WHEN** ein Modul zwei Includes mit ausführbarer Zeile 2 verwendet und nur die zweite Datei einen Haltepunkt besitzt
- **THEN** hält ausschließlich die Anweisung der zweiten Datei an, mit richtigem Quellort und unverändertem Zustand vor ihrer Ausführung

#### Scenario: Einfügen oberhalb einer Marke
- **WHEN** oberhalb eines Breakpoints Zeilen eingefügt und danach neu übersetzt wird
- **THEN** wird die Marke mit dem Dokumentedit verschoben und an der neuen Revision neu gebunden oder sichtbar deaktiviert; sie trifft keine fremde Anweisung

### Requirement: Schrittsteuerung und Calls
F8 SHALL eine BASIC-Anweisung einschließlich Betreten eines Aufrufs ausführen. F10 SHALL den aktuellen Aufruf bis zur nächsten Anweisung desselben Aufrufrahmens ausführen; Breakpoints und Fehlerhalte SHALL dabei Vorrang behalten. F7 SHALL temporär bis zum Cursor laufen, ohne vorhandene Breakpoints zu verlieren. Calls SHALL die Aufrufkette mit Prozedur und Quellort zeigen; Next Statement SHALL zur tatsächlichen Ausführungsstelle navigieren.

#### Scenario: Rekursion und Prozedurschritt
- **WHEN** F10 an einem rekursiven Aufruf verwendet wird
- **THEN** endet der Schritt im ursprünglichen Aufrufrahmen hinter dem Aufruf und nicht in einem gleichnamigen rekursiven Rahmen

#### Scenario: Temporäres Laufziel
- **WHEN** Run to Cursor zuvor durch einen anderen Breakpoint unterbrochen oder das Programm beendet wird
- **THEN** bleiben dauerhafte Breakpoints erhalten und ein beendeter oder abgebrochener Cursorlauf hinterlässt keinen ungewollten temporären Haltepunkt

### Requirement: Watches und Watchpoints
Add Watch, Instant Watch/Shift+F9, Watchpoint, Delete Watch und Delete All Watch SHALL typisierte BASIC-Ausdrücke im ausgewählten erreichbaren Aufrufrahmen einschließlich Modulqualifizierung, Arrayelementen und UDT-Feldern anbieten. Automatische Beobachtung SHALL den Programmzustand unverändert lassen; nicht nebenwirkungsfrei auswertbare Ausdrücke SHALL mit Grund abgewiesen werden. Watchpoints SHALL bei wahrer Bedingung an einer Anweisungsgrenze halten. Auswertungsfehler SHALL den jeweiligen Eintrag markieren und die Sitzung erhalten.

#### Scenario: Beobachtung im lokalen Kontext
- **WHEN** eine rekursive Prozedur pausiert und ein anderer erreichbarer Rahmen in Calls gewählt wird
- **THEN** zeigen dessen Watches die Werte dieses Rahmens einschließlich lokaler Arrays und qualifizierter Globals, ohne den Ausführungsrahmen zu wechseln

#### Scenario: Watchpoint wird wahr
- **WHEN** eine Zuweisung eine zuvor falsche Watchpoint-Bedingung wahr macht
- **THEN** hält die Ausführung an der nächsten sicheren Anweisungsgrenze mit aktualisierten Werten

### Requirement: Direktfenster im pausierten Kontext
Window→Immediate SHALL ein bedarfsweise sichtbares Direktfenster öffnen. Im Break-Modus SHALL es PRINT, Zuweisungen, Prozeduraufrufe und ERROR n über dieselben Sprach-, Typ- und Laufzeitregeln wie Projektcode ausführen. Änderungen an erreichbaren Variablen SHALL danach im Programm sichtbar sein. Ungültige Eingaben SHALL eine Diagnose liefern, ohne den angehaltenen Fortsetzungspunkt zu verlieren. Während eines laufenden Kommandos SHALL Unterbrechen möglich bleiben.

#### Scenario: Wert ändern und fortsetzen
- **WHEN** im lokalen Break-Kontext eine Zuweisung und ein BYREF-Prozeduraufruf eingegeben werden und anschließend F5 folgt
- **THEN** verwendet das Programm die geänderten Werte und setzt am vorherigen Programmpunkt fort; temporärer Direktcode bleibt kein Teil des gespeicherten Projekts

#### Scenario: Fehler im Direktfenster
- **WHEN** ERROR n oder ein fehlerhaftes Direktkommando ausgeführt wird
- **THEN** wird der Fehler nach den geltenden Laufzeitregeln angezeigt beziehungsweise behandelt, die IDE bleibt bedienbar und der Zustand der pausierten Sitzung ist eindeutig erkennbar

### Requirement: Trace und Ausführungshistorie
Trace On SHALL die aktuelle Quellstelle während des Laufs sichtbar verfolgen. History On SHALL ausgeführte Quellstellen in einem begrenzten Verlauf halten; Shift+F8/Shift+F10 SHALL darin rückwärts/vorwärts navigieren. Historische Auswahl SHALL sich von der aktuellen Ausführungsstelle unterscheiden und MUST NOT Variablen, Uhr, Dateien oder andere Nebenwirkungen zurückspulen. Ein Neustart SHALL den Verlauf zurücksetzen.

#### Scenario: Historie betrachten
- **WHEN** nach drei Zuweisungen zweimal rückwärts in History navigiert wird
- **THEN** zeigt die IDE frühere Quellorte als Historie, während Variablenwerte und nächster realer Ausführungspunkt unverändert bleiben

### Requirement: Break on Errors
Bei aktivem Break on Errors SHALL die IDE auch vor der ersten Anweisung eines ausgewählten Fehlerhandlers anhalten und Fehlernummer, verursachenden Quellort und Handlerziel zeigen. Continue SHALL die bestehende Fehlerbehandlung genau einmal fortführen; ohne Debuggeroption SHALL das bisherige Verhalten unverändert bleiben. Unbehandelte Fehler SHALL als solche unterscheidbar bleiben.

#### Scenario: Behandelter Fehler
- **WHEN** ein Laufzeitfehler einen ON-ERROR-Handler auswählt und Break on Errors aktiv ist
- **THEN** hält die IDE vor dem Handlercode; nach Continue stimmen ERR, ERL, Unwinding und RESUME-Verhalten mit dem Lauf ohne Debuggerhalt überein

### Requirement: Sicheres Set Next Statement
Set Next Statement SHALL im Break-Modus den nächsten Ausführungspunkt auf eine ausführbare Stelle desselben aktiven Prozedurrahmens setzen können, sofern Kontroll-, Schleifen-, GOSUB- und Fehlerzustand kompatibel bleiben. Ein unzulässiger Wechsel SHALL begründet und vollständig ohne Zustandsänderung abgewiesen werden. Erfolgreiches Setzen SHALL keine übersprungenen Anweisungen ausführen.

#### Scenario: Gültiger und ungültiger Sprung
- **WHEN** zunächst eine gleichrangige Folgeanweisung und danach eine Stelle in einer anderen Prozedur als nächstes Statement gewählt wird
- **THEN** ist die erste Wahl wirksam und die zweite abgewiesen, ohne den ersten gültigen Fortsetzungspunkt zu verändern
