帮助使用Lisp调试器

Joe*_*oel 9 lisp sbcl common-lisp

我正在尝试理解如何解释Lisp调试器的输出和使用.

我有一个非常简单的Backtrace来评估我的函数,但我似乎无法弄清楚如何使用它来找出我的函数中发生异常的Lisp'形式'.

我很欣赏任何关于我应该做什么的线索,找到我的代码中错误产生的地方.

另外 - 为什么第二帧显示为"没有可用于帧的调试信息"?

我用调试器和repl附加了一个屏幕截图(我还在下面包含了我的函数 - 我知道这是非常错误的 - 但我只是对学习正确使用调试器感兴趣).另外,我在第一帧上点击'v'去了源,但这导致了repl下面的错误.(编辑 - 通过下载并将其复制到正确的路径来修复缺少的源代码问题)

替代文字

(可怕的功能 - 请不要评论!)

(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)))
Run Code Online (Sandbox Code Playgroud)

Xac*_*ach 4

错误在于>,而您的源代码中只有一个>,所以这就是问题所在。

编辑内置 CL 函数很容易在 SBCL 中进行优化,因此尽管代码中的函数调用是CL:<,但实际调用的代码(并显示在调试器中)来自优化的、特定的 SBCL 内部例程。对于用户定义的函数来说,这不是一个问题,您将更有可能获得有用的框架。

  • 为什么我无法在调试器中使用“v”将我带到函数发生的源代码?我真的很想学习如何使用调试器(比修复错误本身更重要!)。 (2认同)