2011-01-09 51 views
9

我想了解如何解釋輸出和使用Lisp調試器。幫助使用Lisp調試器

我已經有了一個非常簡單的Backtrace來評估我的函數,但我似乎無法找出如何使用它找出函數中的Lisp'form'發生了異常。

我很欣賞任何線索,我應該做什麼,找到在我的代碼錯誤發生的地方。

另外 - 爲什麼第二幀顯示爲「沒有可用於幀的調試信息」?

我已經附加了調試器和repl的屏幕截圖(我還包括我的功能在下面 - 我知道這是非常錯誤的 - 但我只是有興趣學習正確使用調試器)。另外,我在第一幀打'v'去源碼,但是這導致了repl以下的錯誤。

alt text

- (編輯缺失的源代碼的問題是通過下載&其複製到正確的路徑固定)(可怕的功能 - !沒有意見請)

(defun myquicksort2 (lst) 
    (if (eql 1 (length lst)) 
     lst 
     (let ((mid (middle lst))) 
    (do ((i 0 (+ i 1))) 
     ((>= i mid) (append (myquicksort2 (subseq lst 0 mid)) 
        (myquicksort2 (subseq lst mid (length lst))))) 
     (if (> (ltval i lst) (nth 100 lst)) 
      (let ((tmp (ltval i lst))) 
     (setf (nth i lst) (gtval i lst)) 
     (setf (nth (- (- (length lst) i) 1) lst) tmp))))))) 

(defun ltval (i lst) 
    (nth i lst)) 

(defun gtval (i lst) 
    (nth (- (- (length lst) i) 1) lst)) 

(defun middle (lst) 
    (round (/ (length lst) 2))) 
+1

應該提到沒有'Lisp調試器'。 Lisp是一個龐大的語言和實現系列。大多數實現具有不同的調試器。像Emacs的SLIME這樣的IDE增加了一個運行在受支持的Lisp之上的調試器接口。 – 2011-01-10 13:38:19

+0

您是否爲最大化調試信息設置了優化標誌?嘗試在編譯所有內容之前在repl中進行評估: (declaim(optimize(speed 0)(safety 3)(debug 3)(size 0))) – Beef 2011-01-10 15:55:44

回答

4

錯誤與>並且您的源中只有一個>,所以這就是問題所在。

編輯內置CL功能非常容易發生在SBCL優化,所以雖然在代碼中的函數調用是CL:<,該代碼實際上是調用(並在調試器中顯示出來)是從優化,具體的SBCL內部例程。這對於用戶定義的函數來說不是一個問題,在這種情況下,您將更有可能獲得有用的框架。