2011-10-08 9 views
7

Estoy tratando de inspeccionar el valor de una variable en un punto de interrupción determinado. Aquí está mi código simplificado:Inspeccionar una variable en el lisp depurador SLIME

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

limo entra en modo depuración en este momento. Así que trato de evaluar presionando la tecla ":" o la tecla "e" y luego escribo "(var var)", pero la baba sigue diciendo:

La variable VAR está desvinculada. [Condición de tipo UNBOUND-VARIABLE]

estoy confundido en cuanto a por qué está diciendo este puesto "(pausa)" está dentro de la función anónima y dentro del ámbito de "var".

Respuesta

4

Eso funciona para mí en CCL y CLisp. Creo que si esto funciona depende de su implementación, y tal vez su configuración de OPTIMIZE. Puede probar:

(declaim (optimize (debug 3))) 

Después tendrá que volver a compilar su código para que surta efecto.

O tal vez, si su implementación admite la interpretación, podría intentarlo, ya que algunas implementaciones ofrecen mejores posibilidades de depuración para el código interpretado que para el compilado.

+1

También, por supuesto, tendría que estar en el marco correcto al presionar 'e', pero supongo que ya lo sabe, y es ahí donde termina de todos modos por defecto. – danlei

+0

Sí, esto funcionó para mí, gracias. Además, una vez que configura la línea "(declaim (optimizar (depurar 3)))", debe volver a compilar su código de lisp para que el cambio sea efectivo. Y sí, debe estar en el marco correcto al evaluar en la variable adecuada en el depurador. –

Cuestiones relacionadas