我正在使用ECL学习Common Lisp。我试着提到https://malisper.me/debugging-lisp-part-1-recompilation/对于调试方法,但是步骤执行无法正常工作。
当我插入"(break("并选择"RETRY"时,处理首先在break处停止。这是上面页面上显示的预期行为。
(defun fib (n)
(break)
(if (<= 0 n 1)
(/ 1 0)
(+ (fib (- n 1))
(fib (- n 2)))))
Break
[Condition of type SIMPLE-CONDITION]
下一次我按下S键时,显示了以下错误消息,尽管它本应被踩下。
SWANK/BACKEND: ACTIVATE-STEPPING not implemented
[Condition of type SIMPLE-ERROR]
Restarts:
0: [ABORT] Return to sldb level 1.
1: [CONTINUE] Return from BREAK.
2: [RETRY] Retry SLIME REPL evaluation request.
3: [* ABORT] Return to SLIME's top level.
4: [ABORT] ABORT
这可能是ECL实现中的一个问题,但我想知道ECL中通常会进行什么样的调试。
谨致问候,NOEU
一个选项:ECL中的STEP
。使用:h
查看步进器中的命令。
> (defun fib (n)
(if (<= 0 n 1)
(/ 1 0)
(+ (fib (- n 1))
(fib (- n 2)))))
FIB
> (step (fib 3))
(FIB 3) -
(BLOCK FIB ...) -
(IF (<= 0 ...) ...) -
(<= 0 ...) -
(+ (FIB #) ...) -
(FIB (- N ...)) -
(- N ...) -
(BLOCK FIB ...) -
(IF (<= 0 ...) ...) -
(<= 0 ...) -
(+ (FIB #) ...) -
(FIB (- N ...)) -
(- N ...) -
(BLOCK FIB ...) -
(IF (<= 0 ...) ...) -
(<= 0 ...) -
(/ 1 ...) -
Condition of type: DIVISION-BY-ZERO
#<a DIVISION-BY-ZERO>
Available restarts:
1. (RESTART-TOPLEVEL) Go back to Top-Level REPL.
Broken at FIB. In: #<process TOP-LEVEL 0x104f16f80>.