19.1.7 使用调试器

进入调试器时,它会在一个窗口显示之前选中的缓冲区, 在另一个窗口显示名为 *Backtrace* 的缓冲区。 调用栈缓冲区的每一行对应当前正在执行的一层 Lisp 函数。 缓冲区开头会有一条消息,说明调试器被触发的原因 (若是因错误触发,则包含错误信息与相关数据)。

调用栈缓冲区为只读,并使用专用主模式——调试器模式(Debugger mode), 其中字母按键被定义为调试器命令。 常规的 Emacs 编辑命令仍然可用; 因此你可以切换窗口,查看出错时正在编辑的缓冲区、切换缓冲区、访问文件或进行其他编辑操作。 但调试器属于递归编辑层级(see Recursive Editing), 建议使用完毕后回到调用栈缓冲区并退出调试器(使用 q 命令)。 退出调试器会离开递归编辑状态,并隐藏调用栈缓冲区。 (你可以通过设置变量 debugger-bury-or-kill 自定义 q 对调用栈缓冲区的行为。 例如,将其设为 kill 以直接杀死缓冲区而非隐藏。更多选项请查阅该变量文档。)

进入调试器后,debug-on-error 会根据 eval-expression-debug-on-error 被临时设置。 若后者为非 nil,则 debug-on-error 会被临时设为 t。 但调试期间发生的后续错误(默认)不会再次触发调试器, 因为 inhibit-debugger 也会被绑定为非 nil

调试器本身必须以字节编译形式运行,因为它对 Lisp 解释器的状态有特定假设。 若调试器以解释形式运行,这些假设将不成立。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike