如何在Emacs+SLIME环境下禁用SBCL调试器并保留简化错误信息?
在Emacs+SLIME环境下禁用SBCL调试器并保留简化错误信息
原来的~/.sbclrc配置在SLIME中失效,是因为SLIME启动时会重置*debugger-hook*,绑定到自身的调试处理逻辑。可以通过以下两种方法解决:
方法一:通过Emacs配置禁用SLIME调试器
在你的Emacs配置文件(如~/.emacs或~/.emacs.d/init.el)中添加以下代码:
(setq slime-debugger-mode nil)
设置后,SLIME遇到错误时不会弹出调试器缓冲区,直接在REPL中打印简化的错误信息,同时终止当前操作。
方法二:在SBCL端针对SLIME环境重新设置钩子
修改~/.sbclrc文件,添加条件判断确保SLIME启动后重新绑定*debugger-hook*:
(defun print-condition-hook (condition hook) "Print this error message (condition) and abort the current operation." (declare (ignore hook)) (princ condition) (clear-input) (abort)) ;; 命令行REPL环境直接应用设置 (unless (find-package :swank) (setf *debugger-hook* #'print-condition-hook)) ;; SLIME环境下,在REPL启动后重新设置钩子 (when (find-package :swank) (ignore-errors (swank:add-hook swank:*swank-repl-started-hook* (lambda () (setf *debugger-hook* #'print-condition-hook)))))
这段代码会自动检测环境:命令行REPL沿用原有设置,SLIME启动后则通过钩子重新应用自定义的错误处理逻辑,确保调试器被禁用,同时保留错误信息打印。
内容的提问来源于stack exchange,提问作者haziz
相关产品推荐
相关产品推荐

