2011-10-08 10 views
7

Próbuję sprawdzić wartość zmiennej w określonym punkcie przerwania. Oto mój uproszczony kod:Sprawdzanie zmiennej w debiucie SLIME o numerze SSL

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

Szlam przechodzi w tryb debuggera w tym momencie. Tak więc próbuję wykonać eval, naciskając klawisz ":" lub "e", a następnie wpisuję "(car var)", ale śluz ciągle mówi:

Zmienna VAR jest niezwiązana. [Warunek typu niezwiązanej zmiennej]

Jestem zdezorientowany, dlaczego to mówi ten od „(przerwa)” jest wewnątrz funkcji anonimowe i objęte zakresem „zmienna”.

Odpowiedz

4

To działa dla mnie pod CCL i CLisp. Myślę, że to działanie zależy od twojej implementacji, a może od ustawień Twojego OPTIMIZE. Możesz spróbować:

(declaim (optimize (debug 3))) 

Będziesz musiał ponownie skompilować swój kod, aby mógł on zadziałać.

A może, jeśli twoja implementacja obsługuje interpretację, możesz spróbować, ponieważ niektóre implementacje zapewniają lepsze możliwości debugowania dla interpretacji niż dla skompilowanego kodu.

+1

Oczywiście, musisz nacisnąć prawą ramkę, gdy naciśniesz 'e', ale domyślam się, że wiesz, i to jest to, gdzie i tak kończysz domyślnie. – danlei

+0

Tak, to działało dla mnie, dziękuję. Ponadto, po ustawieniu linii "(declaim (optimize (debug 3))), musisz przekompilować swój kod Lisp, aby zmiana była skuteczna. I tak, musisz być we właściwej ramce przy ocenie w odpowiedniej zmiennej w debugerze. –

Powiązane problemy