当 Edebug 需要显示内容时(例如在跟踪模式下),会保存来自 Edebug 外部的当前窗口配置(see Window Configurations)。 退出 Edebug 时,会恢复之前的窗口配置。
Emacs 仅在暂停时才会刷新显示。通常,当你继续执行后,程序会在断点处或单步后重新进入 Edebug,期间不会暂停或读取输入。 在这种情况下,Emacs 没有机会刷新外部窗口配置。 因此,你看到的将与上一次 Edebug 激活时相同的窗口配置,不会被打断。
为显示内容而进入 Edebug 时,还会保存并恢复以下数据(但如果发生错误或退出信号,其中部分数据会被故意不恢复)。
edebug-save-windows 为非nil,外部窗口配置会被保存和恢复(see Edebug 选项)。
如果 edebug-save-windows 的值是一个列表,则只保存和恢复列表中的窗口。
窗口配置在出错或退出时不会被恢复,
但即使出错或退出,外部选中窗口仍会被重新选中,以防 save-excursion 处于激活状态。
不过,源码缓冲区的窗口起始位置与水平滚动状态不会被恢复,以保证 Edebug 内部显示的一致性。
保存和恢复外部窗口配置有时会改变你正在调试的 Lisp 程序所操作的缓冲区中的光标位置,尤其是当你的程序会移动光标时。
如果这种情况影响了调试,建议将 edebug-save-windows 设置为 nil(see Edebug 选项)。
edebug-save-displayed-buffer-points 为非nil,每个已显示缓冲区中的光标位置会被保存和恢复。
overlay-arrow-position 和 overlay-arrow-string 会被保存和恢复,
因此你可以在同一缓冲区的其他位置的递归编辑中安全地调用 Edebug。
cursor-in-echo-area 被局部绑定为 nil,使光标显示在窗口中。