#lisp #common-lisp #clisp
#lisp #common-lisp #clisp
Вопрос:
Я пытаюсь проверить значение переменной в определенной точке останова. Вот мой упрощенный код:
(defun foo ()
(maplist (lambda (var)
(break)
var)
'(a b c)))
на этом этапе slime переходит в режим отладчика. Итак, я пытаюсь выполнить оценку, нажав либо клавишу «:», либо клавишу «e», а затем набираю «(car var)», но slime продолжает говорить:
Переменная VAR не привязана. [Условие для типа НЕСВЯЗАННОЙ ПЕРЕМЕННОЙ]
Я не понимаю, почему он так говорит, поскольку «(break)» находится внутри анонимной функции и в пределах области видимости «var».
Ответ №1:
Это работает для меня под CCL и CLisp. Я думаю, работает ли это, зависит от вашей реализации и, возможно, от ваших OPTIMIZE
настроек. Вы могли бы попробовать:
(declaim (optimize (debug 3)))
После этого вам придется перекомпилировать свой код, чтобы он вступил в силу.
Или, может быть, если ваша реализация поддерживает интерпретацию, вы могли бы попробовать это, поскольку некоторые реализации предоставляют лучшие возможности отладки для интерпретируемого, чем для скомпилированного кода.
Комментарии:
1. Кроме того, конечно, вы должны быть в правильном фрейме при нажатии
e
, но я думаю, вы это знаете, и это то, где вы в конечном итоге по умолчанию в любом случае.2. Да, это сработало для меня, спасибо. Кроме того, после установки строки «(declaim (optimize (debug 3)))» вам необходимо перекомпилировать код lisp, чтобы изменения вступили в силу. И да, вы должны быть в правильном фрейме при вычислении соответствующей переменной в отладчике.