我正在学习使用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
发布于 2020-02-26 16:35:14
一种选择是: 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>.https://stackoverflow.com/questions/60406418
复制相似问题