Проверка переменной в отладчике lisp SLIME

#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, чтобы изменения вступили в силу. И да, вы должны быть в правильном фрейме при вычислении соответствующей переменной в отладчике.