How can I execute step-by-step debugging in Common Lisp ECL?
我正在使用 ECL 学习 Common Lisp。我尝试参考 https://malisper.me/debugging-lisp-part-1-recompilation/ 的调试方法,但步骤执行不正常。
当我插入 "(break)" 并选择 "RETRY" 时,处理首先在中断处停止。这是如上页所示的预期行为。
1 2 3 4 5 6 | (defun fib (n) (break) (if (<= 0 n 1) (/ 1 0) (+ (fib (- n 1)) (fib (- n 2))))) |
1 2 | Break [Condition of type SIMPLE-CONDITION] |
我下一次按 S 键时,显示以下错误消息,即使它应该已被踩。
1 2 3 4 5 6 7 8 9 | 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 中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | > (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 # Available restarts: 1. (RESTART-TOPLEVEL) Go back to Top-Level REPL. Broken at FIB. In: #<process TOP-LEVEL 0x104f16f80>. |