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

Я пытаюсь проверить значение переменной в определенной точке останова. Вот мой упрощенный код:

(defun foo ()
  (maplist (lambda (var)
        (break)
        var)
      '(a b c)))

В этот момент слизь переходит в режим отладчика. Итак, я пытаюсь выполнить оценку, нажимая клавишу «:» или клавишу «e», а затем набираю «(car var)», но слизь продолжает говорить:

Переменная VAR не привязана. [Условие типа UNBOUND-VARIABLE]

Я смущен тем, почему он говорит это, поскольку «(break)» находится в анонимной функции и в рамках «var».


person Steve Quezadas    schedule 08.10.2011    source источник


Ответы (1)


Это работает для меня в CCL и CLisp. Я думаю, что это работает, зависит от вашей реализации и, возможно, от ваших настроек OPTIMIZE. Вы можете попробовать:

(declaim (optimize (debug 3)))

После этого вам придется перекомпилировать код, чтобы он вступил в силу.

Или, может быть, если ваша реализация поддерживает интерпретацию, вы могли бы попробовать это, поскольку некоторые реализации предоставляют лучшие возможности отладки для интерпретируемого, чем для скомпилированного кода.

person danlei    schedule 08.10.2011
comment
Кроме того, конечно, вы должны были бы находиться в правильном кадре при нажатии e, но я думаю, вы это знаете, и в любом случае вы оказываетесь там по умолчанию. - person danlei; 08.10.2011
comment
Да, это сработало для меня, спасибо. Кроме того, как только вы установите строку (declaim (optimize (debug 3))), вы должны перекомпилировать свой код lisp, чтобы изменения вступили в силу. И да, вы должны быть в правильном кадре при оценке соответствующей переменной в отладчике. - person Steve Quezadas; 12.10.2011