cg-Cad

Lisp »Tips 'n Tricks »Un Debugging minimo

Il Debugging è il processo grazie al quale portiamo il programma a svolgere le funzioni per cui è stato scritto correggendo gli eventuali errori presenti.

Questo lisp scova le virgolette dispari all'interno di una linea di codice, conta le parentesi aperte e chiuse e salva il tutto in un file ASCII.

E' ovviamente un debugging ai minimi termini.

;| DEBUG.LSP
   (C) by Claudio Piccini (6/08/2003)
 |;

(defun funz1 ( rigo1 / lung nVir K car)
 (setq lung (strlen rigo1))
 (setq nVir 0)
 (setq K 1)
 (repeat lung
  (setq car (substr rigo1 K 1))
  (cond 
   ((= car "(")(setq nParA (+ nParA 1)))
   ((= car ")")(setq nParC (+ nParC 1)))
   ((= car "\"")(setq nVir (+ nVir 1)))
  )
  (setq K (+ K 1))
 )
 (setq nVir (rem nVir 2.0))
 (if (/= nVir 0)
  (progn
    (princ nRigo f2)
    (princ " ? \"" f2)
    (princ "   " f2)
    (princ rigo f2)
    (princ "\n" f2)
  )
 )
)

(defun c:debug (/ f1 f2 nf nf2 
                  rigo nRigo nParA nParC
 )
 (setq nRigo 1)
 (setq nParA 0)
 (setq nParC 0)
 (setq nf (getfiled "Debugging" "" "lsp" 0))
 (if (/= nf nil)
  (progn 
   (setq f1 (open nf "r"))
   (setq nomeDir (getvar "dwgprefix"))
   (setq nf2 (strcat nomeDir "debug.txt"))
   (setq f2 (open nf2 "w"))
   (setq rigo " ")
   (while (/= rigo nil)
    (setq rigo (read-line f1))
    (if (/= rigo nil)
     (progn
      (funz1 rigo)
      (setq nRigo (+ nRigo 1))
     )
    )
   )
   (close f1)
   (princ "\nParentesi (: " f2)
   (princ nParA f2)
   (princ "\nParentesi ): " f2)
   (princ nParC f2)
   (close f2)
  )
  (princ "\nFile non trovato")
 )
 (princ)
)
; eof

Come test ho tolto una parentesi e tre virgolette dal sorgente PSET.LSP (Libreria PicK 3.0) quindi ho usato DEBUG.LSP.
DEBUG processa il lisp e salva l'analisi nel file DEBUG.TXT all'interno della cartella dove è aperto il disegno (o comunque di default).
Ho aperto il file con il blocco note di Windows e questo è il risultato:

25 ? " (setvar "snapmode snm)
40 ? " (setq s1 (entsel "\n Seleziona l'entita':))
47 ? " (command "_layer" "_s" nL ")

Parentesi (: 49
Parentesi ): 48


Se il sorgente è molto grande conviene prima passarlo al lisp NRIGO.LSP che salva in un file ASCII il sorgente con le linee di codice numerate, così è più facile trovare le linee di codice con il bug.

Lisp »Tips 'n Tricks