1

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

(setf *debugger-hook* #'(lambda (c h) (declare (ignore h)) (print c) (abort)))

但是,以上不适用于 Emacs SLIME。每当我编译/加载文件(Cc Ck)时,它仍然会调用调试器(带有中止计算、重新启动、输入新值等选项)。我怎样才能让 SLIME 只打印错误消息并让我回到顶层?是的,它与 SBCL 和 ~/.sbclrc 和以前一样。看起来 SLIME 不尊重用户的*DEBUGGER-HOOK*.

4

1 回答 1

1

根据http://common-lisp.net/project/slime/doc/html/Other-configurables.html在文件中设置SWANK:*GLOBAL-DEBUGGER*为零~/.swank.lisp应该强制 SLIME 不替换*DEBUGGER-HOOK*SWANK:SWANK-DEBUGGER-HOOK(显示重启列表等),但它以某种方式对我不起作用,即SWANK:*GLOBAL-DEBUGGER*nil 但无论如何*DEBUGGER-HOOK*都被 SLIME 取代。也许你会更幸运。

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

于 2013-04-22T15:13:55.887 回答