有时我会收到“嵌套超过 `max-lisp-eval-depth'”错误。
- 这是什么意思?
- 当我得到一个时,除了“killall emacs”之外,我还能做些什么吗?
编辑:
如果您评估以下内容,您可能会收到错误:
(defun func ()
(func))
(func)
但是,在这种情况下,emacs 仍然响应。
有时我会收到“嵌套超过 `max-lisp-eval-depth'”错误。
如果您评估以下内容,您可能会收到错误:
(defun func ()
(func))
(func)
但是,在这种情况下,emacs 仍然响应。
一个直接的补救措施可以是简单地增加最大值。它的默认值为 500,但您可以像这样将其设置为 10000:
(setq max-lisp-eval-depth 10000)
但这通常不是一个好主意,因为您遇到嵌套超过“max-lisp-eval-depth”错误的事实首先表明您的代码的某些部分占用了太多的堆栈空间。但至少暂时增加最大值可以帮助您分析问题,而不会一遍又一遍地收到相同的错误消息。
基本上,这意味着一些 Lisp 代码使用的堆栈比 Emacs 编译允许的要多。
实际上,这是 Lisp 代码中存在错误的标志。即使算法和输入数据是“正确的”,正确编写的代码也应避免深度嵌套;但更常见的是,由于未处理的极端情况或意外输入而发生这种情况。
如果你幸运的话,重复的 control-G 按键可以让你在不杀死 Emacs 的情况下摆脱困境。
如果您正在开发 Emacs Lisp 代码,您可能需要人为地调整值,max-lisp-eval-depth
以帮助找到您的代码可能需要强化或修复错误的地方。当然,debug-on-error
设置为t
应该有助于向您显示堆栈的回溯。