mal*_*per 5 lisp debugging sbcl common-lisp slime
我试图找出如何在调用类似break之类的调试器后逐步执行sbcl和Slime中的代码.我不想从头开始踩踏.例如,如果我有以下代码:
(defun fib (n)
  (when (eql n 2)
    (break))
  (if (<= 0 n 1)
      n
      (+ (fib (- n 1))
         (fib (- n 2)))))
Run Code Online (Sandbox Code Playgroud)
在达到断点之后,我希望能够开始逐步完成代码.我发现这样做的唯一方法是在Slime中查看框架,使用"Return From Frame"(R)功能,然后键入(step(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}>)
Run Code Online (Sandbox Code Playgroud)
我正在寻找的应该是可能的.从sbcl手动步进
可以通过
step宏或从调试器中调用.
我使用Slime 2.12运行sbcl 1.2.5并且我的优化质量都是1,除了安全和调试都是3.