【发布时间】:2012-08-04 08:30:07
【问题描述】:
有时我会收到“嵌套超出 `max-lisp-eval-depth'”错误。
- 这是什么意思?
- 当我得到一个时,除了“killall emacs”之外,我还能做些什么吗?
编辑:
如果你评估,你会得到错误:
(defun func ()
(func))
(func)
但是,在这种情况下,emacs 仍然是响应式的。
【问题讨论】:
标签: emacs
有时我会收到“嵌套超出 `max-lisp-eval-depth'”错误。
如果你评估,你会得到错误:
(defun func ()
(func))
(func)
但是,在这种情况下,emacs 仍然是响应式的。
【问题讨论】:
标签: 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 应该有助于向您显示堆栈的回溯。
【讨论】: