19.1.2 调试重绘错误

由于技术原因,当重绘过程调用的 Lisp 代码发生错误时, Emacs 常规的调试机制无法使用。 本节介绍如何从这类错误中获取调用栈,这对调试此类错误有帮助。

这些方法适用于以下场景中使用的 Lisp 形式: 例如 :eval 模式行结构(see The Data Structure of the Mode Line), 以及所有从重绘过程调用的钩子,包括:

注意:如果重绘调用的钩子函数中发生错误, 错误处理机制可能会将该函数从钩子中移除。 因此你需要以某种方式重新初始化该钩子(例如使用 add-hook), 才能重现该问题。

要在此类场景下生成调用栈,需将变量 backtrace-on-redisplay-error 设为非nil。错误发生时,Emacs 会将调用栈输出到 *Redisplay-trace* 缓冲区,但不会自动在窗口中显示该缓冲区。 这样做是为了避免不必要地破坏你正在调试的重绘过程。 你需要手动显示该缓冲区,例如使用命令 switch-to-buffer-other-frameC-x 5 b)。

Variable: backtrace-on-redisplay-error

将该变量设为非nil,可在重绘调用的任意 Lisp 代码发生错误时 生成调用栈。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike