Emacs:嵌套超过“最大lisp评估深度”';

Emacs:嵌套超过“最大lisp评估深度”';,emacs,Emacs,有时我会收到一个“嵌套超过'max lisp eval depth'”错误 这是什么意思 当我得到一个,有什么我可以做的,除了“杀死所有emacs” 编辑: 如果计算以下值,则可能会得到错误: (defun func () (func)) (func) 然而,在这种情况下,emacs仍然保持响应。基本上,这意味着一些Lisp代码使用的堆栈比emacs编译时允许的要多 实际上,这是Lisp代码中存在错误的一个标志。正确编写的代码应该避免深入嵌套,即使算法和输入数据是“正确的”;但更常见的

有时我会收到一个“嵌套超过'max lisp eval depth'”错误

  • 这是什么意思
  • 当我得到一个,有什么我可以做的,除了“杀死所有emacs”
编辑: 如果计算以下值,则可能会得到错误:

(defun func ()
  (func))
(func)

然而,在这种情况下,emacs仍然保持响应。

基本上,这意味着一些Lisp代码使用的堆栈比emacs编译时允许的要多

实际上,这是Lisp代码中存在错误的一个标志。正确编写的代码应该避免深入嵌套,即使算法和输入数据是“正确的”;但更常见的情况是,它发生的原因是未处理的角落案例或意外输入

如果幸运的话,反复按control-G键可以让您在不杀死Emacs的情况下摆脱困境


如果您正在开发Emacs Lisp代码,您可能希望人为地调整
max Lisp eval depth
的值,以帮助找到代码可能需要强化或bug修复的地方。当然,将
debug-on-error
设置为
t
应该有助于显示堆栈的回溯轨迹。

一个立即的补救方法是简单地增加最大值。其默认值为500,但您可以将其设置为10000,如下所示:

(setq max-lisp-eval-depth 10000)

但这通常不是一个好主意,因为首先遇到嵌套超过“max lisp eval depth”错误的事实表明代码的某些部分占用了太多的堆栈空间。但至少暂时增加最大值可以帮助您分析问题,而不会一次又一次地收到相同的错误消息。

我就是这么想的,但我不明白为什么堆栈不简单地“折叠”,而不是生成emacsunusable@sabof如果您想知道答案,请搜索emacs-devel邮件列表。据我所知,这主要是一件祖传的事情。