本节介绍的命令会一直执行,直到到达指定位置才暂停。 除 i 外,这些命令都会先创建一个临时断点,确定暂停位置,然后切换到运行模式。 在到达目标暂停点之前遇到的任何其他断点,同样会使程序暂停。 关于断点的详细说明,见 See Edebug 断点。
如果发生非本地退出,这些命令可能无法按预期工作,因为非本地退出会跳过你期望程序暂停的临时断点。
执行到光标附近的暂停点(edebug-goto-here)。
执行一个表达式后暂停(edebug-forward-sexp)。
执行到当前所在表达式的末尾(edebug-step-out)。
单步进入光标所在列表表达式调用的函数或宏(edebug-step-in)。
h 命令通过临时断点,执行到光标当前位置或之后的暂停点。
f 命令让程序向前执行一个表达式。
更精确地说,它在 forward-sexp 会到达的位置设置一个临时断点,然后以运行模式执行,使程序在断点处暂停。
如果使用前缀参数 n,临时断点会被设置在光标之后第 n 个表达式处。 如果当前所在列表在到达 n 个元素前就结束,则暂停位置为当前所在表达式之后。
你必须确认 forward-sexp 找到的位置是程序真正会执行到的位置。
例如在 cond 表达式中,情况可能并非如此。
为了更灵活,f 命令从光标位置而非当前暂停点开始执行 forward-sexp。
如果你希望 从当前暂停点 执行一个表达式,先输入 w(edebug-where)将光标移到暂停点,再输入 f。
o 命令会执行出当前表达式。它在包含光标的表达式末尾设置临时断点。 如果当前所在表达式本身是函数定义,o 会执行到定义中最后一个表达式之前。 如果当前位置就在那里,它会从函数返回后暂停。 换句话说,除非你位于最后一个表达式之后,否则该命令不会退出当前正在执行的函数。
通常,h、f 和 o 命令会显示“Break”,并在显示刚求值的表达式结果前暂停 edebug-sit-for-seconds 秒。
将 edebug-sit-on-break 设置为 nil 可以取消该暂停。See Edebug 选项。
i 命令单步进入光标所在列表表达式调用的函数或宏,并在其第一个暂停点暂停。 注意,该表达式不一定是即将被求值的表达式。 但如果该表达式是即将被求值的函数调用,记得在参数被求值前使用该命令,否则就来不及了。
i 命令会对即将进入的函数或宏进行插桩(如果尚未插桩)。 这很方便,但要注意:除非你显式移除插桩,否则该函数或宏会一直保持插桩状态。