【发布时间】:2015-03-09 12:15:52
【问题描述】:
在使用诸如 break 之类的调用调试器后,我试图弄清楚如何单步执行 sbcl 和 Slime 中的代码。我不想从头开始。例如,如果我有以下代码:
(defun fib (n)
(when (eql n 2)
(break))
(if (<= 0 n 1)
n
(+ (fib (- n 1))
(fib (- n 2)))))
命中断点后,我希望能够开始单步执行代码。我发现这样做的唯一方法是在 Slime 中检查框架,使用“从框架返回”(R)功能,然后输入(步骤(fib 2))。
当我尝试使用“Step”(s) 功能时,我得到的是:
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}>)
我正在寻找的应该是可能的。来自 sbcl 手动步进
可以通过
step宏调用,或在调试器中调用。
我正在运行带有 Slime 2.12 的 sbcl 1.2.5,我的优化质量都是 1,除了安全和调试都是 3。
【问题讨论】:
-
这真的是断章取义,听起来像是一个错误或支持请求。您是否尝试过在 freenode 的 IRC #lisp 频道或 SLIME 的邮件列表中提问?它似乎与 SBCL 没有直接关系,因为您似乎没有尝试在没有 SLIME 的情况下踏入它。
标签: debugging lisp common-lisp sbcl slime