【问题标题】:Turn-off debugger in Emacs SLIME在 Emacs SLIME 中关闭调试器
【发布时间】:2013-04-20 08:29:02
【问题描述】:

根据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* 设置。

【问题讨论】:

  • 我想*DEBUGGER-HOOK* 指的是实现的调试器。它是标准的一部分。所以,我认为 SLIME 不需要尊重它。
  • @FaheemMitha 是的,它是 Common Lisp 标准的一部分:clhs.lisp.se/Body/v_debugg.htm

标签: emacs lisp common-lisp slime sbcl


【解决方案1】:

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

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

【讨论】:

  • 不起作用,就像对你一样。我将(setq SWANK:*GLOBAL-DEBUGGER* nil) 放入 ~/.swank.lisp 但没有任何效果。我可以在 REPL 中设置*debugger-hook*,但每次都这样做很笨拙。我正在考虑在 slime-devel 邮件列表中询问这个问题,如果 SO 上没有人知道的话。
猜你喜欢
  • 2012-09-18
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多