【问题标题】:Display error message only in minibuffer in Emacs仅在 Emacs 的 minibuffer 中显示错误消息
【发布时间】:2026-02-15 05:40:01
【问题描述】:

我在 Emacs 中打开了错误调试,这使得 backtrace 缓冲区在我有误操作时弹出到前面。这很烦人,我只是想知道是否有办法在 minibuffer 中显示调试错误消息?如果我真的想看看错误细节,我可以自己切换到 backtrace 缓冲区。

【问题讨论】:

  • 请注意,如果您自己编写 Emacs 包并希望在不启动调试器的情况下发出普通错误,您可以使用user-error。此外,如果您想找出现有软件包的错误,您可以添加错误符号或 regexp:s 匹配错误消息到 debug-ignores-errors

标签: emacs


【解决方案1】:

我觉得你错过了一个关键方面。 debug-on-error 不只是将堆栈跟踪的文本生成为某种日志1;它将您带入一个交互式调试器,这或多或少需要一些用户交互。

我说“或多或少”是因为 Emacs 在这种情况下不会停下来——你可以在调试器打开时继续做事——但是你也会注意到 debug-on-error 被忽略了,而调试器是打开的,因此如果您与打开的调试器交互,后续错误将不会生成新的调试会话。

不用说您不希望默认启用此选项。 debug-on-error 是您在需要时启用它,否则保持禁用状态。

我怀疑这里真正的问题是:您要调试什么?因为如果你觉得这个选项很烦人,它可能不是最好的选择。或者您可以更有针对性地使用它。

首先(坚持使用debug-on-error 变量)您可以将其限制为特定的错误条件列表,和/或您可以配置debug-ignored-errors 以排除您不想调试的错误。

其次,还有许多其他方法可以使用标准调试器,这可能是更好的解决方案。例如:

;; M-x debug-on-entry FUNCTION
;; M-x cancel-debug-on-entry &optional FUNCTION
;; M-x toggle-debug-on-quit
;; setq debug-on-signal
;; setq debug-on-next-call
;; setq debug-on-event
;; setq debug-on-message REGEXP
;; (debug &rest DEBUGGER-ARGS)

(还有edebug。)

当然,您也应该查看手册:
C-hig (elisp) Debugging RET

1 如果您想要一个选项确实只需将堆栈跟踪记录到缓冲区然后继续,您可以通过@987654329 将其作为功能请求提出@。

【讨论】:

    【解决方案2】:

    一种解决方案是关闭debug-on-error!然后,当您收到要查看回溯的错误消息时再次打开它 - 并再次引发错误。

    当然,这仅对您知道如何重现的错误有用。

    (P.S. 你的意思是回显区域,而不是 minibuffer。)

    【讨论】:

      最近更新 更多