如何在Common Lisp ECL中执行逐步调试



我正在使用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>.

相关内容

  • 没有找到相关文章

最新更新