2011-10-08 19 views
7

Tôi đang cố gắng kiểm tra giá trị của một biến tại điểm ngắt xác định. Đây là mã đơn giản của tôi:Kiểm tra biến trong trình gỡ lỗi SLIME lisp

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

Chất nhờn đi vào chế độ trình gỡ lỗi tại thời điểm này. Vì vậy, tôi cố gắng đánh giá bằng cách nhấn phím ":" hoặc "e" và sau đó tôi nhập "(ô tô var)", nhưng chất nhờn tiếp tục nói:

Biến VAR không bị ràng buộc. [Điều kiện loại Unbound-BIẾN]

Tôi đang bối rối là tại sao nó nói điều này vì "(break)" nằm trong chức năng ẩn danh và trong phạm vi "var".

Trả lời

4

Điều đó phù hợp với tôi theo CCL và CLisp. Tôi nghĩ rằng việc này có hiệu quả hay không phụ thuộc vào việc triển khai của bạn và có thể là cài đặt OPTIMIZE của bạn. Bạn có thể thử:

(declaim (optimize (debug 3))) 

Bạn sẽ phải biên dịch lại mã của mình sau đó để mã có hiệu lực. Hoặc có thể, nếu việc triển khai của bạn hỗ trợ diễn giải, bạn có thể thử điều đó, vì một số triển khai cung cấp khả năng gỡ lỗi tốt hơn để diễn giải hơn so với mã được biên dịch.

+1

Ngoài ra, tất nhiên bạn phải ở đúng khung khi nhấn 'e', nhưng tôi đoán bạn biết điều đó, và đó là nơi bạn kết thúc theo mặc định. – danlei

+0

Vâng, điều này làm việc cho tôi, cảm ơn bạn. Ngoài ra, một khi bạn thiết lập "(declaim (tối ưu hóa (debug 3)))" dòng, bạn phải biên dịch lại mã lisp của bạn cho sự thay đổi có hiệu quả. Và có, bạn phải ở đúng khung khi đánh giá trong biến thích hợp trong trình gỡ lỗi. –