这些选项会影响 Edebug 的行为:
在使用 Edebug 之前调用的函数。
每次设置为新值时,Edebug 会调用这些函数一次,然后将 edebug-setup-hook 重置为 nil。
你可以用它来加载与某个包相关的 Edebug 规范,但仅在同时使用 Edebug 时才加载。
See Edebug 的代码插桩.
若为非nil,则对 defun、defmacro 等定义形式的常规求值都会为 Edebug 进行插桩。
这适用于 eval-defun、eval-region 和 eval-buffer。
使用命令 M-x edebug-all-defs 可切换该选项的值。See Edebug 的代码插桩.
若为非nil,则命令 eval-defun、eval-region 和 eval-buffer
会对所有表达式插桩,即使那些不定义任何东西的表达式。
这不适用于加载或迷你缓冲区中的求值。
使用命令 M-x edebug-all-forms 可切换该选项的值。See Edebug 的代码插桩.
若为非nil,则所有宏参数都会在生成的代码中被插桩。
对任何宏而言,debug 声明都会覆盖此选项。
因此,要为部分参数求值、部分不求值的宏指定例外情况,
请使用 debug 声明指定 Edebug 表达式规范。
若为非nil,Edebug 会保存并恢复窗口配置。
这会消耗一些时间,因此如果你的程序不关心窗口配置的变化,最好将此变量设为 nil。
如果默认值导致 Edebug 在保存/恢复窗口配置时,
覆盖了你正在调试的程序所涉及缓冲区中的光标位置(例如程序会移动光标),我们也建议设为 nil。
这种情况下另一个可以尝试自定义的选项是下面的 edebug-save-displayed-buffer-points。
如果 edebug-save-windows 的值是一个列表,则只保存和恢复列表中的窗口。
你可以在 Edebug 中使用 W 命令交互式修改此变量。See Edebug 显示更新机制.
若为非nil,Edebug 会保存并恢复所有已显示缓冲区中的光标位置。
如果你正在调试的代码会修改在非选中窗口中显示的缓冲区的光标, 那么保存并恢复其他缓冲区的光标就很有必要。 如果之后 Edebug 或用户选中了该窗口,缓冲区中的光标会跳转到窗口的光标位置。
保存并恢复所有缓冲区的光标开销较大,因为需要两次选中每个窗口,因此只在需要时开启。 See Edebug 显示更新机制.
若该变量非nil,它指定 Edebug 首次激活时的初始执行模式。
可选值有:step、next、go、Go-nonstop、trace、
Trace-fast、continue、Continue-fast。
默认值为 step。
可以用 C-x C-a C-m(edebug-set-initial-mode)交互式设置该变量。
See Edebug 运行模式.
若为非nil,则跟踪每个函数的进入与退出。
跟踪输出显示在名为 *edebug-trace* 的缓冲区中,每行一个函数进入或退出记录,
按递归深度缩进。
另见 跟踪缓冲区 中的 edebug-tracing。
若为非nil,则在 Edebug 外部继续定义或执行正在运行的键盘宏。
请谨慎使用,因为该功能未经过调试测试。
See Edebug 运行模式.
若为非nil,Edebug 在显示表达式结果时会尝试移除自身添加的插桩代码。
这在调试宏时非常有用,因为宏中表达式的结果本身可能也是被插桩的表达式。
举一个人为例子:假设函数 fac 已被插桩,考虑如下形式的宏:
(defmacro test () "Edebug example."
(if (symbol-function 'fac)
...))
如果你对 test 宏插桩并单步执行,默认情况下 symbol-function 调用的结果
会包含大量 edebug-after 和 edebug-before 形式,导致难以看清实际结果。
如果 edebug-unwrap-results 为非nil,Edebug 会尝试从结果中移除这些形式。
如果你在 Edebug 激活期间修改了 edebug-on-error 或 edebug-on-quit,
它们的值要等到 下一次 通过新命令触发 Edebug 时才会生效。
若为非nil,则是一个在每个暂停点都会检测的表达式。
若结果为非nil,则中断。错误会被忽略。
See 全局中断条件.
当到达断点且执行模式为跟踪或继续时,暂停的秒数。 See Edebug 运行模式.
到达断点时是否暂停 edebug-sit-for-seconds 秒。
设为 nil 禁止暂停,非nil 允许暂停。
默认情况下,该关联列表包含一个键为 edebug 的条目,
以及由三个函数组成的列表,它们是插桩代码中调用的默认实现:
edebug-enter、edebug-before 和 edebug-after。
要全局修改 Edebug 的行为,可修改默认条目。
也可以按单个定义修改 Edebug 行为:向此 alist 添加一个自定义键和三个函数,
然后将被插桩定义的 edebug-behavior 符号属性设为新条目的键,
Edebug 就会为该定义调用新函数,而不是自身的函数。
Edebug 在包装完一个定义或闭包的代码体之后运行的函数。
在 Edebug 初始化完自身数据后,会以一个参数调用该函数:
即与该定义关联的符号,可以是实际定义的符号,也可以是 Edebug 生成的符号。
该函数可用于为每个被 Edebug 插桩的定义设置 edebug-behavior 符号属性。
要在插桩生效前检查或修改 Edebug 的插桩结果,可将此变量设为一个函数: 它接受一个参数(被插桩的顶层表达式),返回原表达式或替换后的表达式, Edebug 会将其作为最终的插桩结果使用。