lisp dbg library um ein paar Einträge gefixt. dbg lib wird geladen und initalisiert. .dbg file erscheint im logs Ordner. Fix zu den verlorenden Attributen des Kreisels
This commit is contained in:
+77
-46
@@ -12,31 +12,27 @@
|
||||
;; (dbgp "text") - Debug-Print (Alias fuer dbgmsg)
|
||||
;; (dbgmsg "text") - Freitext-Nachricht loggen
|
||||
;;
|
||||
;; Strategie: dbgf/dbg/dbgmsg puffern im Speicher.
|
||||
;; dbgreturn flusht den Puffer auf die Platte (open/append/close).
|
||||
;; So hat jede Funktion mindestens einen Schreibvorgang,
|
||||
;; ohne dass jeder einzelne dbg-Aufruf die Datei oeffnet.
|
||||
;;
|
||||
;; dbgon/dbgoff steuert, ob Ausgaben geschrieben werden.
|
||||
;; Damit kann man gezielt nur bestimmte Abschnitte debuggen.
|
||||
;; Ein (dbgoff) VOR (dbgopen) verhindert das Anlegen der Datei.
|
||||
;;
|
||||
;; Beispiel:
|
||||
;; (dbgopen "test.dbg")
|
||||
;; (dbgoff) ; ab hier keine Ausgabe
|
||||
;; (dbgf "unwichtig") ; wird NICHT geschrieben
|
||||
;; (dbgreturn 0)
|
||||
;; (dbgon) ; ab hier wieder Ausgabe
|
||||
;; (dbgopen "test.dbg" "DXFM_LOG")
|
||||
;; (dbgf "meine-funktion")
|
||||
;; (dbg 'x)
|
||||
;; (dbgreturn ergebnis)
|
||||
;; (dbgreturn ergebnis) ; <-- hier wird alles geschrieben
|
||||
;; (dbgclose)
|
||||
;;
|
||||
;; Erzeugt z.B.:
|
||||
;; meine-funktion(){
|
||||
;; x=42
|
||||
;; } = 99
|
||||
;; ============================================================
|
||||
|
||||
;; Globale Variablen
|
||||
(setq *dbg-file* nil) ; Datei-Handle
|
||||
(setq *dbg-path* nil) ; Voller Dateipfad (String)
|
||||
(setq *dbg-indent* 0) ; Aktuelle Einruecktiefe
|
||||
(setq *dbg-active* T) ; Debug-Ausgabe aktiv (Standard: ein)
|
||||
(setq *dbg-buffer* nil) ; Zeilenpuffer (Liste von Strings)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBGON - Debug-Ausgabe aktivieren
|
||||
@@ -54,6 +50,33 @@
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBG-FLUSH - Puffer auf Platte schreiben (open/append/close)
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbg-flush (/ fh)
|
||||
(if (and *dbg-path* *dbg-buffer*)
|
||||
(progn
|
||||
(setq fh (open *dbg-path* "a"))
|
||||
(if fh
|
||||
(progn
|
||||
(foreach line (reverse *dbg-buffer*)
|
||||
(write-line line fh)
|
||||
)
|
||||
(close fh)
|
||||
)
|
||||
)
|
||||
(setq *dbg-buffer* nil)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBG-BUFWRITE - Zeile in den Puffer schreiben
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbg-bufwrite (line)
|
||||
(setq *dbg-buffer* (cons line *dbg-buffer*))
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBGOPEN - Debug-Datei oeffnen
|
||||
;; Wenn *dbg-active* nil ist, wird keine Datei angelegt.
|
||||
@@ -62,12 +85,8 @@
|
||||
;; envvar - Optional: Name einer Umgebungsvariable fuer das
|
||||
;; Zielverzeichnis (z.B. "DXFM_LOG").
|
||||
;; Wenn nil oder nicht gesetzt, wird "." verwendet.
|
||||
;; Aufruf:
|
||||
;; (dbgopen "test.dbg" "DXFM_LOG") -> C:\...\log\test.dbg
|
||||
;; (dbgopen "test.dbg" nil) -> .\test.dbg
|
||||
;; (dbgopen "test.dbg") -> .\test.dbg
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbgopen (filename envvar / dir fullpath ts)
|
||||
(defun dbgopen (filename envvar / dir fullpath fh ts)
|
||||
(if (not *dbg-active*)
|
||||
(progn
|
||||
(prompt "\n[DBG] Debug deaktiviert - keine Datei angelegt.")
|
||||
@@ -85,22 +104,31 @@
|
||||
(if (or (not dir) (= dir ""))
|
||||
(setq dir ".")
|
||||
)
|
||||
;; Pfad zusammenbauen (Backslash am Ende sicherstellen)
|
||||
;; Backslash am Ende sicherstellen
|
||||
(if (and (/= (substr dir (strlen dir) 1) "\\")
|
||||
(/= (substr dir (strlen dir) 1) "/"))
|
||||
(setq dir (strcat dir "\\"))
|
||||
)
|
||||
;; Verzeichnis anlegen falls es nicht existiert
|
||||
(if (not (vl-file-directory-p (vl-string-right-trim "\\/" dir)))
|
||||
(progn
|
||||
(vl-mkdir (vl-string-right-trim "\\/" dir))
|
||||
(prompt (strcat "\n[DBG] Verzeichnis angelegt: " dir))
|
||||
)
|
||||
)
|
||||
(setq fullpath (strcat dir filename))
|
||||
(prompt (strcat "\n[DBG] Oeffne: " fullpath))
|
||||
(if *dbg-file* (close *dbg-file*))
|
||||
(setq *dbg-file* (open fullpath "w"))
|
||||
(setq *dbg-indent* 0)
|
||||
(if *dbg-file*
|
||||
;; Datei mit "w" erstellen/leeren, Header schreiben, sofort schliessen
|
||||
(setq fh (open fullpath "w"))
|
||||
(if fh
|
||||
(progn
|
||||
;; Timestamp sicher erzeugen (menucmd kann nil liefern)
|
||||
(setq *dbg-path* fullpath)
|
||||
(setq *dbg-indent* 0)
|
||||
(setq *dbg-buffer* nil)
|
||||
(setq ts (menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD HH:MM:SS)"))
|
||||
(if (not ts) (setq ts "(kein Zeitstempel)"))
|
||||
(write-line (strcat "=== DEBUG START " ts " ===") *dbg-file*)
|
||||
(write-line (strcat "=== DEBUG START " ts " ===") fh)
|
||||
(close fh)
|
||||
(prompt (strcat "\n[DBG] Debug-Datei geoeffnet: " fullpath))
|
||||
)
|
||||
(prompt (strcat "\n[DBG] FEHLER: Konnte Debug-Datei nicht oeffnen: " fullpath))
|
||||
@@ -111,16 +139,16 @@
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBGCLOSE - Debug-Datei schliessen
|
||||
;; DBGCLOSE - Debug-Datei schliessen (Puffer + Abschluss schreiben)
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbgclose ( / ts)
|
||||
(if *dbg-file*
|
||||
(if *dbg-path*
|
||||
(progn
|
||||
(setq ts (menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD HH:MM:SS)"))
|
||||
(if (not ts) (setq ts "(kein Zeitstempel)"))
|
||||
(write-line (strcat "=== DEBUG ENDE " ts " ===") *dbg-file*)
|
||||
(close *dbg-file*)
|
||||
(setq *dbg-file* nil)
|
||||
(dbg-bufwrite (strcat "=== DEBUG ENDE " ts " ==="))
|
||||
(dbg-flush)
|
||||
(setq *dbg-path* nil)
|
||||
(setq *dbg-indent* 0)
|
||||
(prompt "\n[DBG] Debug-Datei geschlossen.")
|
||||
)
|
||||
@@ -132,8 +160,8 @@
|
||||
;; ------------------------------------------------------------
|
||||
;; DBG-TABS - Hilfsfunktion: Erzeugt Einrueckung
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbg-tabs (/ result i)
|
||||
(setq result "" i 0)
|
||||
(defun dbg-tabs (/ result)
|
||||
(setq result "")
|
||||
(repeat *dbg-indent*
|
||||
(setq result (strcat result "\t"))
|
||||
)
|
||||
@@ -173,13 +201,13 @@
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBGF - Funktionseintritt loggen
|
||||
;; DBGF - Funktionseintritt loggen (puffert nur)
|
||||
;; Schreibt "funktionsname(){" und erhoeht Einrueckung
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbgf (funcname)
|
||||
(if (and *dbg-file* *dbg-active*)
|
||||
(if (and *dbg-path* *dbg-active*)
|
||||
(progn
|
||||
(write-line (strcat (dbg-tabs) funcname "(){") *dbg-file*)
|
||||
(dbg-bufwrite (strcat (dbg-tabs) funcname "(){"))
|
||||
(setq *dbg-indent* (1+ *dbg-indent*))
|
||||
)
|
||||
)
|
||||
@@ -187,43 +215,46 @@
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBGRETURN - Funktionsaustritt loggen
|
||||
;; DBGRETURN - Funktionsaustritt loggen + FLUSH auf Platte
|
||||
;; Verringert Einrueckung und schreibt "} = wert"
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbgreturn (retval)
|
||||
(if (and *dbg-file* *dbg-active*)
|
||||
(if (and *dbg-path* *dbg-active*)
|
||||
(progn
|
||||
(setq *dbg-indent* (max 0 (1- *dbg-indent*)))
|
||||
(write-line (strcat (dbg-tabs) "} = " (dbg-tostring retval)) *dbg-file*)
|
||||
(if retval
|
||||
(dbg-bufwrite (strcat (dbg-tabs) "} = " (dbg-tostring retval)))
|
||||
(dbg-bufwrite (strcat (dbg-tabs) "}"))
|
||||
)
|
||||
(dbg-flush)
|
||||
)
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBG - Variable/Wert loggen
|
||||
;; Schreibt "<tabs> name='wert'"
|
||||
;; DBG - Variable/Wert loggen (puffert nur)
|
||||
;; Aufruf: (dbg 'varname) oder (dbg wert)
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbg (varname / val)
|
||||
(if (and *dbg-file* *dbg-active*)
|
||||
(if (and *dbg-path* *dbg-active*)
|
||||
(if (= (type varname) 'SYM)
|
||||
(progn
|
||||
(setq val (eval varname))
|
||||
(write-line (strcat (dbg-tabs) (vl-symbol-name varname) "=" (dbg-tostring val)) *dbg-file*)
|
||||
(dbg-bufwrite (strcat (dbg-tabs) (vl-symbol-name varname) "=" (dbg-tostring val)))
|
||||
)
|
||||
(write-line (strcat (dbg-tabs) "value=" (dbg-tostring varname)) *dbg-file*)
|
||||
(dbg-bufwrite (strcat (dbg-tabs) "value=" (dbg-tostring varname)))
|
||||
)
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; DBGMSG - Freitext-Nachricht loggen
|
||||
;; DBGMSG - Freitext-Nachricht loggen (puffert nur)
|
||||
;; ------------------------------------------------------------
|
||||
(defun dbgmsg (msg)
|
||||
(if (and *dbg-file* *dbg-active*)
|
||||
(write-line (strcat (dbg-tabs) ">> " msg) *dbg-file*)
|
||||
(if (and *dbg-path* *dbg-active*)
|
||||
(dbg-bufwrite (strcat (dbg-tabs) ">> " msg))
|
||||
)
|
||||
(princ)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user