Edebug 支持多种运行被调试程序的方式,这些方式称为 Edebug 运行模式(Edebug execution modes),不要与主模式或次要模式混淆。 当前 Edebug 运行模式决定了 Edebug 在暂停前会连续执行多少代码(例如,是在每个暂停点都停下,还是直接运行到下一个断点),以及在暂停前显示多少求值进度。
通常,你通过输入命令以指定模式继续运行程序,从而选择 Edebug 运行模式。 下表列出这些命令,除 S 外,其余都会恢复程序执行(至少会向前执行一段)。
停止:不再继续执行程序,等待更多 Edebug 命令(edebug-stop)。
单步:在下一个遇到的暂停点停止(edebug-step-mode)。
下一步:在某个表达式之后的下一个暂停点停止(edebug-next-mode)。
另见 跳转 中的 edebug-forward-sexp。
跟踪:在每个 Edebug 暂停点短暂暂停(默认为 1 秒,edebug-trace-mode)。
快速跟踪:在每个暂停点刷新显示,但不实际暂停(edebug-Trace-fast-mode)。
运行:一直执行到下一个断点(edebug-go-mode)。See Edebug 断点。
持续:在每个断点处暂停 1 秒,然后继续(edebug-continue-mode)。
快速持续:将光标跳转到每个断点,但不暂停(edebug-Continue-fast-mode)。
无间断运行:忽略所有断点(edebug-Go-nonstop-mode)。
你仍可以通过输入 S 或任意编辑命令停止程序。
一般来说,表中靠前的运行模式会让程序执行更慢、暂停更早,靠后的模式则执行更快、暂停更晚。
当进入新的 Edebug 层级时,Edebug 通常会在遇到第一个被插桩的函数时暂停。
如果你希望只在断点处暂停,或完全不暂停(例如收集覆盖度数据时),
可以将 edebug-initial-mode 从默认的 step 改为 go、Go-nonstop 或其他可选值(see Edebug 选项)。
可以直接使用 C-x C-a C-m(edebug-set-initial-mode)进行设置:
该命令绑定在 C-x C-a C-m,用于设置 edebug-initial-mode。
它会提示你输入一个按键以指定模式,输入上表中的 8 个按键之一即可设置对应模式。
注意,同一个 Edebug 层级可能被多次重新进入,例如某个被插桩的函数被同一条命令多次调用时。
在执行或跟踪过程中,你可以输入任意 Edebug 命令中断执行。 Edebug 会在下一个暂停点停止程序,然后执行你输入的命令。 例如,在执行期间输入 t 会在下一个暂停点切换到跟踪模式。 可以用 S 直接停止执行,不做其他操作。
如果你的函数恰好需要读取输入,你原本想用来中断执行的字符可能会被函数当作输入读取。 留意程序何时需要输入,可以避免这类意外情况。
包含本节命令的键盘宏无法完全正常工作:退出 Edebug 恢复程序时,会丢失键盘宏的状态。这一问题不易修复。
此外,在 Edebug 外部定义或执行键盘宏不会影响 Edebug 内部的命令,这通常是有益的。
另见 Edebug 选项 中的 edebug-continue-kbd-macro 选项。
该选项指定在跟踪模式或持续模式下,每步执行之间等待的秒数。默认值为 1 秒。