Вывод, который вас смущает, связан с местом в коде, где был вызван break
. Когда я вызываю его из ванильного Lisp REPL (без SLIME), он отображает:
(SB-INT:SIMPLE-EVAL-IN-LEXENV (BREAK) #<NULL-LEXENV>)
Однако, если я делаю что-то не так в отладчике, вот что происходит:
0] q
; in: PROGN (PRINT 1)
; (PROGN Q)
;
; caught WARNING:
; undefined variable: COMMON-LISP-USER::Q
;
; compilation unit finished
; Undefined variable:
; Q
; caught 1 WARNING condition
debugger invoked on a UNBOUND-VARIABLE in thread
#<THREAD "main thread" RUNNING {10005204C3}>:
The variable Q is unbound.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE ] Retry using Q.
1: [USE-VALUE ] Use specified value.
2: [STORE-VALUE] Set specified value and use it.
3: [ABORT ] Reduce debugger level (to debug level 1).
4: Return from BREAK.
5: Exit debugger, returning to top level.
((LAMBDA (#:G498)) #<unused argument>)
source: (PROGN Q)
Вы можете видеть, что последняя строка напоминает вывод, который вы получили со строкой, начинающейся с source:
. На самом деле вывод, который мы видели, состоит из 3 основных частей: 1. Описание условия 2. Перечень доступных перезапусков 3. Приглашение отладки REPL, напечатанное как debug-loop-fun
Последний вывод является частью приглашения и он генерируется вызовом:
(print-frame-call *current-frame* *debug-io* :print-frame-source t)
Итак, вы можете перекомпилировать вызов, предоставив :print-frame-source nil
или попытаться понять, почему ваш текущий кадр выглядит так ...