Debug-Logging fuer VF-Linienzug Modus 1 und Modus 3

Zentrale Debug-Schalter-Sammlung (*dbg-schalter*, Default AUS) in
ssg_dbg.lsp: dbg-schalter-on/-off/-p/-open/-liste. dbg*-Aufrufe bleiben
dauerhaft im Code, ohne im Normalbetrieb .dbg-Dateien zu erzeugen.

Modus 1 (vf-linienzug-modus): Session-Logging ueber Schalter
"vfl-modus1" nach DXFM_LOG/vfl_modus1.dbg. Da alle interaktiven
Eingaben bereits ueber die gemeinsamen vfl-in-point/-string/-real/
-int/-value/-selection-Wrapper laufen, reicht eine einzige
Instrumentierung in vfl-journal-record/-mark/-steplabel, um jede
Frage/Antwort automatisch mitzuloggen.

Modus 3 (vf-linienzug-modus3): auf dieselben vfl-in-*-Wrapper
umgestellt (vorher rohe getstring/getreal/getint/ssget) - profitiert
dadurch vom selben automatischen Logging (Schalter "vfl-modus3",
DXFM_LOG/vfl_modus3.dbg). Kein Journal-Replay/XDATA wie bei Modus 1/2,
nur das Logging wurde uebernommen. Fix nebenbei: Dialog-Kopfzeile
"Hoehe (Z) des Endpunkts [%1]" zeigte den Platzhalter woertlich statt
des Vorschlagswerts (ssg-text statt ssg-textf).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-27 10:59:10 +02:00
parent c9ce3bbe4a
commit 4238509e7d
3 changed files with 299 additions and 58 deletions
+49
View File
@@ -192,6 +192,55 @@ Beispiel:
(dbgclose)
```
#### Zentrale Debug-Schalter (default AUS)
Damit `dbg*`-Aufrufe dauerhaft im Code stehen bleiben können, ohne im
Normalbetrieb `.dbg`-Dateien zu erzeugen, gibt es eine zentrale Schalter-Sammlung
(`*dbg-schalter*`, Symbol → 0/1, alle standardmäßig 0/aus). Eine Routine öffnet
ihre Debug-Datei nur, wenn ihr Schalter eingeschaltet ist.
| Funktion | Beschreibung |
| --- | --- |
| `dbg-schalter-on name` | Schalter `name` einschalten (1) |
| `dbg-schalter-off name` | Schalter `name` ausschalten (0) |
| `dbg-schalter-p name` | `T` wenn eingeschaltet, sonst `nil` |
| `dbg-schalter-open name filename envvar` | Öffnet die Datei **nur** wenn Schalter=1; gibt `T`/`nil` zurück |
| `dbg-schalter-liste` | Alle bekannten Schalter + Zustand ausgeben |
Bekannte Schalter:
| Schalter | Modul | Loggt nach |
| --- | --- | --- |
| `"vfl-modus1"` | Linienzug Modus 1 (manuelle Eingabe, `vf-linienzug-modus`) | `DXFM_LOG/vfl_modus1.dbg` |
| `"vfl-modus3"` | Linienzug Modus 3 (Vorwärts-Nachbau, `vf-linienzug-modus3`) | `DXFM_LOG/vfl_modus3.dbg` |
Modus 1 (und baugleich Modus 2) loggen automatisch **jede** interaktive Eingabe,
weil beide ausschließlich über die gemeinsamen Wrapper `vfl-in-point`/`-string`/
`-real`/`-int`/`-value`/`-selection` gehen, die zentral in `vfl-journal-record`
protokolliert werden keine einzelne Aufrufstelle im Bau-Ablauf musste dafür
angefasst werden. Modus 3 ist bewusst reine Konsole (`getstring`/`getreal`/
`getint`, kein Journal) und wird stattdessen direkt in `vf-linienzug-modus3`
mit eigenen `dbgmsg`-Aufrufen an jeder Frage/Antwort geloggt.
```lisp
;; In der BricsCAD-Konsole VOR dem Befehl FOERDERANLAGE:
(dbg-schalter-on "vfl-modus1")
;; ... FOERDERANLAGE -> linienzug -> Modus 1 durchspielen ...
;; -> Datei DXFM_LOG/vfl_modus1.dbg enthält Session + alle Eingaben
(dbg-schalter-off "vfl-modus1") ; wieder abschalten
```
Muster in einer Routine:
```lisp
(setq dbg-an (dbg-schalter-open "vfl-modus3" "vfl_modus3.dbg" "DXFM_LOG"))
(if dbg-an (dbgmsg "FRAGE: ..."))
;; ... get* ...
(if dbg-an (progn (dbgmsg "ANTWORT:") (dbg 'wert) (dbgflush)))
;; am Ende:
(if dbg-an (progn (dbgreturn ergebnis) (dbgclose)))
```
---
### `ssg_dialog.lsp` Dialog-Pattern für Modul-Einfüge-Makros