Tôi đang cố gắng tìm ra cách để vượt qua mã trong sbcl và Slime sau khi gọi trình gỡ lỗi với một cái gì đó như phá vỡ. Tôi không muốn phải bắt đầu bước từ đầu. Ví dụ: nếu tôi có mã sau:Bước vào sbcl từ bên trong trình gỡ lỗi
(defun fib (n)
(when (eql n 2)
(break))
(if (<= 0 n 1)
n
(+ (fib (- n 1))
(fib (- n 2)))))
Sau khi điểm ngắt được nhấn, tôi muốn có thể bắt đầu bước qua mã. Cách duy nhất tôi đã tìm thấy để làm điều này, là đi qua khung trong Slime, sử dụng tính năng "Return From Frame" (R), và gõ vào (bước (fib 2)).
Khi tôi cố gắng sử dụng "Bước" (s) tính năng, thay vì thực sự bước, tôi cho điều này:
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}>)
Những gì tôi đang tìm kiếm nên có thể. Từ hướng dẫn sbcl bước
có thể được gọi thông qua
step
vĩ mô, hoặc từ bên trong trình gỡ lỗi.
Tôi đang chạy sbcl 1.2.5 với Slime 2.12 và chất lượng tối ưu của tôi là tất cả 1 trừ cho sự an toàn và gỡ lỗi đó đều phô trương 3.
Điều này thực sự nằm ngoài ngữ cảnh ở đây, có vẻ như lỗi hoặc yêu cầu hỗ trợ. Bạn đã thử hỏi trong kênh #lisp IRC ở freenode hoặc danh sách gửi thư của SLIME chưa? Nó không có vẻ trực tiếp về SBCL, vì dường như bạn đã thử bước vào nó mà không có SLIME. – acelent