Sto cercando di capire come interpretare l'output di, e utilizzare, il debugger di Lisp.Aiuto usando il debugger di Lisp
Ho un backtrace piuttosto semplice per la valutazione della mia funzione, ma non riesco a capire come usarlo per scoprire in quale Lisp 'form' nella mia funzione si è verificata l'eccezione.
Apprezzerei qualsiasi suggerimento su cosa dovrei fare, per trovare dove nel mio codice ha avuto origine l'errore.
Inoltre, perché il secondo fotogramma viene visualizzato come "nessuna informazione di debug disponibile per il frame"?
Ho allegato uno screenshot con il debugger e repl (ho incluso anche la mia funzione di seguito - so che è molto sbagliato - ma sono solo interessato a imparare a usare correttamente il debugger). Inoltre, ho premuto "v" sul primo frame per andare al sorgente, ma questo ha provocato l'errore sotto il repl. (EDIT - la questione del codice sorgente mancante è fissato scaricando & copiandolo al percorso corretto)
(funzione orribile - commenti si prega)
(defun myquicksort2 (lst)
(if (eql 1 (length lst))
lst
(let ((mid (middle lst)))
(do ((i 0 (+ i 1)))
((>= i mid) (append (myquicksort2 (subseq lst 0 mid))
(myquicksort2 (subseq lst mid (length lst)))))
(if (> (ltval i lst) (nth 100 lst))
(let ((tmp (ltval i lst)))
(setf (nth i lst) (gtval i lst))
(setf (nth (- (- (length lst) i) 1) lst) tmp)))))))
(defun ltval (i lst)
(nth i lst))
(defun gtval (i lst)
(nth (- (- (length lst) i) 1) lst))
(defun middle (lst)
(round (/ (length lst) 2)))
Uno dovrebbe dire che non esiste il "debugger Lisp". Lisp è una grande famiglia di linguaggi e implementazioni. La maggior parte delle implementazioni ha diversi debugger. Un IDE come SLIME per Emacs aggiunge a quello un'interfaccia di debugger che viene eseguita in cima ai Lisp supportati. –
Hai impostato i flag di ottimizzazione per le informazioni di debug massimo? Prova a valutare questo nel repl prima di compilare tutto: (declaim (optimization (speed 0) (safety 3) (debug 3) (size 0))) – Beef
@Beef - sì, ho già provato questo. – Joel