根据this question,我可以自定义变量*DEBUGGER-HOOK*
,使其回退到顶层(在REPL中)而不是调试器。我已经将这一行添加到我的〜/ .sbclrc中,当我从命令行启动sbcl时它就没事了。
(setf *debugger-hook* #'(lambda (c h) (declare (ignore h)) (print c) (abort)))
但是,上述内容对Emacs SLIME不起作用。每当我编译/加载文件(C-c C-k)时,它仍会调用调试器(使用中止计算,重启,输入新值等选项)。我怎么能要求SLIME打印错误信息并让我回到顶层?是的,它与SBCL和前面的〜/ .sbclrc相同。看起来SLIME不尊重用户的*DEBUGGER-HOOK*
设置。
答案 0 :(得分:1)
根据http://common-lisp.net/project/slime/doc/html/Other-configurables.html设置SWANK:*GLOBAL-DEBUGGER*
设置为~/.swank.lisp
文件中的nil应强制SLIME不要将*DEBUGGER-HOOK*
替换为SWANK:SWANK-DEBUGGER-HOOK
(显示重启列表等) ),但它在某种程度上对我不起作用,即SWANK:*GLOBAL-DEBUGGER*
为零,但无论如何*DEBUGGER-HOOK*
被SLIME取代。也许你会更幸运。
作为一种解决方法,我可以建议手动将*DEBUGGER-HOOK*
设置为slime-repl缓冲区中的任何内容,这对我有用。