Sto cercando di capire come passare attraverso il codice in sbcl e Slime dopo aver richiamato il debugger con qualcosa come break. Non voglio dover iniziare a fare un passo dall'inizio. Per esempio, se ho il seguente codice:Stepping in sbcl dall'interno del debugger
(defun fib (n)
(when (eql n 2)
(break))
(if (<= 0 n 1)
n
(+ (fib (- n 1))
(fib (- n 2)))))
Dopo il punto di rottura è colpito, voglio essere in grado di avviare un passo attraverso il codice. L'unico modo che ho trovato per fare questo, è di andare oltre il frame in Slime, utilizzare la funzione "Return From Frame" (R) e digitare (step (fib 2)).
Quando provo ad utilizzare la (s) funzione "Passo", invece di fare un passo in realtà, mi viene data questa:
Evaluating call:
(CONTINUE)
With arguments:
[Condition of type STEP-FORM-CONDITION]
Restarts:
0: [STEP-CONTINUE] Resume normal execution
1: [STEP-OUT] Resume stepping after returning from this function
2: [STEP-NEXT] Step over call
3: [STEP-INTO] Step into call
4: [ABORT] Return to sldb level 1.
5: [CONTINUE] Return from BREAK.
--more--
Backtrace:
0: (SWANK:SLDB-STEP 0)
1: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:SLDB-STEP 0) #<NULL-LEXENV>)
2: (EVAL (SWANK:SLDB-STEP 0))
3: (SWANK:EVAL-FOR-EMACS (SWANK:SLDB-STEP 0) "COMMON-LISP-USER" 122)
4: ((FLET #:FORM-FUN-7055 :IN SWANK::SLDB-LOOP))
5: (SWANK::SLDB-LOOP 1)
6: ((LAMBDA NIL :IN SWANK::DEBUG-IN-EMACS))
7: ((FLET SWANK/BACKEND:CALL-WITH-DEBUGGING-ENVIRONMENT :IN "/home/michael/slime/swank/sbcl.lisp") #<FUNCTION (LAMBDA NIL :IN SWANK::DEBUG-IN-EMACS) {1003DB44CB}>)
Quello che sto cercando dovrebbe essere possibile. Dal manuale sbcl passo
può essere invocata tramite
step
macro o dentro il debugger.
Sto facendo funzionare SBCL 1.2.5 con Slime 2.12 e le mie qualità di ottimizzazione sono tutti 1 tranne che per la sicurezza e il debug che sono entrambi Swank 3.
Questo è davvero fuori contesto qui, sembra un bug o una richiesta di supporto. Hai provato a chiedere nel canale #lisp dell'IRC su freenode o sulla mailing list di SLIME? Non sembra direttamente su SBCL, in quanto non sembra che tu abbia provato a farlo senza SLIME. – acelent