我想弄清楚如何通過sbcl和Slime中的代碼調用類似break之類的調試器之後的代碼。我不想從一開始就開始邁步。例如,如果我有以下代碼:破發點被擊中從調試器中進入sbcl
(defun fib (n)
(when (eql n 2)
(break))
(if (<= 0 n 1)
n
(+ (fib (- n 1))
(fib (- n 2)))))
後,我希望能夠開始逐步執行代碼。我發現要做到這一點的唯一方法就是在Slime中使用「Return From Frame」(R)特徵,並輸入(step(fib 2))。
當我嘗試使用「步驟」(一個或多個)功能,而不是實際踏步,我給這樣的:
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
宏或從調試器內被調用。
我運行SBCL 1.2.5煤泥2.12和我的優化素質都是1,除了安全和調試這兩者都是3
這實際上超出了上下文,聽起來像是一個錯誤或支持請求。你有沒有試過在freenode或SLIME郵件列表的IRC#lisp頻道詢問?它似乎並不直接關於SBCL,因爲它似乎並沒有嘗試在沒有SLIME的情況下加入它。 – acelent