2011-01-09 69 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内部例程。这对于用户定义的函数来说不是一个问题,在这种情况下,您将更有可能获得有用的框架。