我不时收到"嵌套超过`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
应该会对您显示堆栈的回溯有所帮助。