19.2.16 Edebug 选项

这些选项会影响 Edebug 的行为:

User Option: edebug-setup-hook

在使用 Edebug 之前调用的函数。 每次设置为新值时,Edebug 会调用这些函数一次,然后将 edebug-setup-hook 重置为 nil。 你可以用它来加载与某个包相关的 Edebug 规范,但仅在同时使用 Edebug 时才加载。 See Edebug 的代码插桩.

User Option: edebug-all-defs

若为非nil,则对 defundefmacro 等定义形式的常规求值都会为 Edebug 进行插桩。 这适用于 eval-defuneval-regioneval-buffer

使用命令 M-x edebug-all-defs 可切换该选项的值。See Edebug 的代码插桩.

User Option: edebug-all-forms

若为非nil,则命令 eval-defuneval-regioneval-buffer 会对所有表达式插桩,即使那些不定义任何东西的表达式。 这不适用于加载或迷你缓冲区中的求值。

使用命令 M-x edebug-all-forms 可切换该选项的值。See Edebug 的代码插桩.

User Option: edebug-eval-macro-args

若为非nil,则所有宏参数都会在生成的代码中被插桩。 对任何宏而言,debug 声明都会覆盖此选项。 因此,要为部分参数求值、部分不求值的宏指定例外情况, 请使用 debug 声明指定 Edebug 表达式规范。

User Option: edebug-save-windows

若为非nil,Edebug 会保存并恢复窗口配置。 这会消耗一些时间,因此如果你的程序不关心窗口配置的变化,最好将此变量设为 nil。 如果默认值导致 Edebug 在保存/恢复窗口配置时, 覆盖了你正在调试的程序所涉及缓冲区中的光标位置(例如程序会移动光标),我们也建议设为 nil。 这种情况下另一个可以尝试自定义的选项是下面的 edebug-save-displayed-buffer-points

如果 edebug-save-windows 的值是一个列表,则只保存和恢复列表中的窗口。

你可以在 Edebug 中使用 W 命令交互式修改此变量。See Edebug 显示更新机制.

User Option: edebug-save-displayed-buffer-points

若为非nil,Edebug 会保存并恢复所有已显示缓冲区中的光标位置。

如果你正在调试的代码会修改在非选中窗口中显示的缓冲区的光标, 那么保存并恢复其他缓冲区的光标就很有必要。 如果之后 Edebug 或用户选中了该窗口,缓冲区中的光标会跳转到窗口的光标位置。

保存并恢复所有缓冲区的光标开销较大,因为需要两次选中每个窗口,因此只在需要时开启。 See Edebug 显示更新机制.

User Option: edebug-initial-mode

若该变量非nil,它指定 Edebug 首次激活时的初始执行模式。 可选值有:stepnextgoGo-nonstoptraceTrace-fastcontinueContinue-fast

默认值为 step。 可以用 C-x C-a C-medebug-set-initial-mode)交互式设置该变量。 See Edebug 运行模式.

User Option: edebug-trace

若为非nil,则跟踪每个函数的进入与退出。 跟踪输出显示在名为 *edebug-trace* 的缓冲区中,每行一个函数进入或退出记录, 按递归深度缩进。

另见 跟踪缓冲区 中的 edebug-tracing

User Option: edebug-test-coverage

若为非nil,Edebug 会对所有被调试的表达式进行覆盖度测试。 See 覆盖度测试.

User Option: edebug-continue-kbd-macro

若为非nil,则在 Edebug 外部继续定义或执行正在运行的键盘宏。 请谨慎使用,因为该功能未经过调试测试。 See Edebug 运行模式.

User Option: edebug-print-length

若为非nil,作为 Edebug 中打印结果时 print-length 的默认值。 See 影响输出的变量.

User Option: edebug-print-level

若为非nil,作为 Edebug 中打印结果时 print-level 的默认值。 See 影响输出的变量.

User Option: edebug-print-circle

若为非nil,作为 Edebug 中打印结果时 print-circle 的默认值。 See 影响输出的变量.

User Option: edebug-unwrap-results

若为非nil,Edebug 在显示表达式结果时会尝试移除自身添加的插桩代码。 这在调试宏时非常有用,因为宏中表达式的结果本身可能也是被插桩的表达式。 举一个人为例子:假设函数 fac 已被插桩,考虑如下形式的宏:

(defmacro test () "Edebug example."
  (if (symbol-function 'fac)
      ...))

如果你对 test 宏插桩并单步执行,默认情况下 symbol-function 调用的结果 会包含大量 edebug-afteredebug-before 形式,导致难以看清实际结果。 如果 edebug-unwrap-results 为非nil,Edebug 会尝试从结果中移除这些形式。

User Option: edebug-on-error

如果之前 debug-on-errornil,Edebug 会将其绑定为此变量的值。 See 错误捕获.

User Option: edebug-on-quit

如果之前 debug-on-quitnil,Edebug 会将其绑定为此变量的值。 See 错误捕获.

如果你在 Edebug 激活期间修改了 edebug-on-erroredebug-on-quit, 它们的值要等到 下一次 通过新命令触发 Edebug 时才会生效。

User Option: edebug-global-break-condition

若为非nil,则是一个在每个暂停点都会检测的表达式。 若结果为非nil,则中断。错误会被忽略。 See 全局中断条件.

User Option: edebug-sit-for-seconds

当到达断点且执行模式为跟踪或继续时,暂停的秒数。 See Edebug 运行模式.

User Option: edebug-sit-on-break

到达断点时是否暂停 edebug-sit-for-seconds 秒。 设为 nil 禁止暂停,非nil 允许暂停。

User Option: edebug-behavior-alist

默认情况下,该关联列表包含一个键为 edebug 的条目, 以及由三个函数组成的列表,它们是插桩代码中调用的默认实现: edebug-enteredebug-beforeedebug-after。 要全局修改 Edebug 的行为,可修改默认条目。

也可以按单个定义修改 Edebug 行为:向此 alist 添加一个自定义键和三个函数, 然后将被插桩定义的 edebug-behavior 符号属性设为新条目的键, Edebug 就会为该定义调用新函数,而不是自身的函数。

User Option: edebug-new-definition-function

Edebug 在包装完一个定义或闭包的代码体之后运行的函数。 在 Edebug 初始化完自身数据后,会以一个参数调用该函数: 即与该定义关联的符号,可以是实际定义的符号,也可以是 Edebug 生成的符号。 该函数可用于为每个被 Edebug 插桩的定义设置 edebug-behavior 符号属性。

User Option: edebug-after-instrumentation-function

要在插桩生效前检查或修改 Edebug 的插桩结果,可将此变量设为一个函数: 它接受一个参数(被插桩的顶层表达式),返回原表达式或替换后的表达式, Edebug 会将其作为最终的插桩结果使用。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike