关闭Emacs SLIME中的调试器

关闭Emacs SLIME中的调试器,emacs,lisp,common-lisp,slime,sbcl,Emacs,Lisp,Common Lisp,Slime,Sbcl,根据,我可以自定义变量*DEBUGGER-HOOK*,使其返回顶层(在REPL中),而不是调试器。我已经将这一行添加到我的~/.sbclrc中,当我从命令行启动sbcl时,一切都很好 (setf *debugger-hook* #'(lambda (c h) (declare (ignore h)) (print c) (abort))) 但是,上述方法不适用于Emacs粘液。每当我编译/加载一个文件(C-C-k),它仍然会调用调试器(使用诸如中止计算、重新启动、输入新值等选项)。我怎样才能让

根据,我可以自定义变量
*DEBUGGER-HOOK*
,使其返回顶层(在REPL中),而不是调试器。我已经将这一行添加到我的~/.sbclrc中,当我从命令行启动sbcl时,一切都很好

(setf *debugger-hook* #'(lambda (c h) (declare (ignore h)) (print c) (abort)))
但是,上述方法不适用于Emacs粘液。每当我编译/加载一个文件(C-C-k),它仍然会调用调试器(使用诸如中止计算、重新启动、输入新值等选项)。我怎样才能让SLIME打印错误消息并将我返回到顶层?是的,它与SBCL和~/.sbclrc一样。看起来SLIME不尊重用户在
~/.SWANK.lisp
文件中将
*DEBUGGER-HOOK*
设置为零的
*DEBUGGER-HOOK*
SWANK:SWANK-DEBUGGER-HOOK
(显示重启列表等)中的
*DEBUGGER-HOOK*
设置,但不知何故,它对我不起作用,即,
SWANK:*GLOBAL-DEBUGGER*
为零,但无论如何,
*DEBUGGER-HOOK*
被SLIME替换。也许你会更幸运

作为一种解决方法,我可以建议手动将
*DEBUGGER-HOOK*
设置为slime repl缓冲区中所需的任何值,这对我很有用。

根据设置
SWANK:
~/.SWANK.lisp
文件中的
为零。SWANK.lisp
文件应强制SLIME不要将
*DEBUGGER-HOOK*
替换为
SWANK:SWANK-DEBUGGER-HOOK
(其中显示了重启列表等),但它对我不起作用,也就是说,
SWANK:*GLOBAL-DEBUGGER*
为零,但无论如何,
*DEBUGGER-HOOK*
被SLIME替换。也许你会更幸运


作为一种解决方法,我可以建议手动将
*DEBUGGER-HOOK*
设置为slime repl缓冲区中您想要的任何内容,这对我来说是有效的。

我想象
*DEBUGGER-HOOK*
指的是实现的调试器。这是标准的一部分。所以,我认为SLIME不需要尊重它。@FaheemMitha是的,它是通用Lisp标准的一部分:我想象
*DEBUGGER-HOOK*
指的是实现的调试器。这是标准的一部分。所以,我不认为SLIME需要尊重它。@FaheemMitha是的,它是通用Lisp标准的一部分:不工作,就像你一样。我将
(setq-SWANK:*GLOBAL-DEBUGGER*nil)
放在~/.SWANK.lisp中,但没有效果。我可以在REPL中设置
*调试器钩子*
,但每次这样做都很笨拙。我正在考虑在slime-devel邮件列表中问这个问题,如果没有人知道的话。不起作用,就像你一样。我将
(setq-SWANK:*GLOBAL-DEBUGGER*nil)
放在~/.SWANK.lisp中,但没有效果。我可以在REPL中设置
*调试器钩子*
,但每次这样做都很笨拙。我想在slime-devel邮件列表中问这个问题,如果没有人知道的话。