【发布时间】:2011-06-06 03:46:43
【问题描述】:
我正在尝试了解如何解释和使用 Lisp 调试器的输出。
我有一个非常简单的 Backtrace 来评估我的函数,但我似乎无法弄清楚如何使用它来找出我的函数中发生异常的 Lisp 'form'。
如果我能提供任何关于我应该做什么的线索,我将不胜感激,以便在我的代码中找到错误的来源。
另外 - 为什么第二个框架显示为“没有可用于框架的调试信息”?
我附上了调试器和 repl 的屏幕截图(我还在下面包含了我的函数 - 我知道这是非常错误的 - 但我只是对学习正确使用调试器感兴趣)。另外,我在第一帧上按了“v”以转到源,但这导致了repl下方的错误。 (编辑 - 通过下载并将其复制到正确的路径来修复丢失的源代码问题)
(可怕的功能 - 请不要使用 cmets!)
(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)))
【问题讨论】:
-
应该提到没有“Lisp 调试器”。 Lisp 是一大类语言和实现。大多数实现都有不同的调试器。像 Emacs 的 SLIME 这样的 IDE 添加了一个在受支持的 Lisps 之上运行的调试器接口。
-
您是否设置了优化标志以获得最大的调试信息?在编译所有内容之前尝试在 repl 中进行评估:(declaim (optimize (speed 0) (safety 3) (debug 3) (size 0)))
-
@Beef - 是的,我已经尝试过了。
-
@Joel:我不知道你的操作系统是什么(人们真的应该提供这些信息),但是 Debian 有一个名为
sbcl-source的软件包,它正是为此目的而设计的——回溯等。您的操作系统也可能有一个。 Debian 安装在/usr/share/sbcl-source/src,这正是您的调试器正在寻找的位置。 :-)
标签: lisp common-lisp sbcl