Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Lisp调试器的帮助_Lisp_Common Lisp_Sbcl - Fatal编程技术网

使用Lisp调试器的帮助

使用Lisp调试器的帮助,lisp,common-lisp,sbcl,Lisp,Common Lisp,Sbcl,我试图理解如何解释和使用Lisp调试器的输出 我有一个非常简单的回溯来评估我的函数,但我似乎不知道如何使用它来找出异常发生在函数中的哪个Lisp“form” 如果有任何关于我应该做什么的线索,我将不胜感激,以便在我的代码中找到错误的来源 另外-为什么第二个帧显示为“没有可用于帧的调试信息” 我附加了一个带有调试器和repl的屏幕截图(我也在下面包含了我的函数-我知道这是非常错误的-但我只是对学习正确使用调试器感兴趣)。此外,我在第一帧中点击了“v”以转到源代码,但这导致了repl下面的错误。(编

我试图理解如何解释和使用Lisp调试器的输出

我有一个非常简单的回溯来评估我的函数,但我似乎不知道如何使用它来找出异常发生在函数中的哪个Lisp“form”

如果有任何关于我应该做什么的线索,我将不胜感激,以便在我的代码中找到错误的来源

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

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

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


错误出现在
中,而您的源代码中只有一个
,因此这就是问题所在


edit内置CL函数在SBCL中极易优化,因此尽管代码中的函数调用是
CL:为什么我不能在调试器中使用“v”来找到函数出现的源代码?我真的很想学习如何使用调试器(不仅仅是修复错误本身!)。@Xach——关于您在第一次编辑中提出的观点——是否有办法禁用这种“积极优化”——以获得更用户友好的调试输出?我已经为编译代码中的最大调试支持设置了(sb ext:restrict compiler policy'debug 3)。由于错误在内部例程中,您需要以SBCL可以再次找到它的方式安装SBCL的源代码。一个简单的方法是构建SBCL并从源代码处安装。我不知道是否有办法禁用这种优化。是否有办法告诉我源代码中的错误来源?如果我有很多对>的函数调用,那就很难跟踪了。还有关于第二个帧的回溯为什么说“没有可用于帧的调试信息”的线索吗?应该提到的是,没有“Lisp调试器”。Lisp是一大类语言和实现。大多数实现都有不同的调试器。像SLIME for Emacs这样的IDE为其添加了一个在支持的Lisp上运行的调试器接口。您是否为最大调试信息设置了优化标志?在编译所有内容之前,请尝试在repl中对此进行评估:(declaim(优化(速度0)(安全3)(调试3)(大小0))@Beef-是的,我已经尝试过了。@Joel:我不知道你的操作系统是什么(人们真的应该提供此信息),但Debian有一个名为
sbcl source
,这正是为了这个目的-回溯等。您的操作系统可能也有一个。Debian one安装在
/usr/share/sbcl source/src
中,这正是调试器要查看的地方。:-)
(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)))