我不时会得到"嵌套超过'max-lisp-eval-depth'"的错误.
如果您评估,可以得到错误:
(defun func ()
(func))
(func)
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,emacs保持响应.
立即补救措施可以是简单地增加最大值.它的默认值是500,但您可以将它设置为10000,如下所示:
(setq max-lisp-eval-depth 10000)
Run Code Online (Sandbox Code Playgroud)
但这通常不是一个好主意,因为你遇到嵌套的事实首先超过了"max-lisp-eval-depth"错误,这表明代码的某些部分占用了太多的堆栈空间.但至少暂时增加最大值可以帮助您分析问题,而不会一遍又一遍地获得相同的错误消息.
基本上,这意味着某些 Lisp 代码使用的堆栈多于 Emacs 编译允许的堆栈。
实际上,这是 Lisp 代码中存在错误的迹象。正确编写的代码应该避免嵌套这么深,即使算法和输入数据是“正确的”;但更常见的是,这种情况是由于未处理的极端情况或意外输入而发生的。
换句话说,您可能通过递归创建了无限循环,或者例如具有指数回溯的正则表达式。
如果幸运的话,重复按下 control-G 按键可以让你摆脱困境,而不会杀死 Emacs。
如果您正在开发 Emacs Lisp 代码,您可能需要人为地调整 的值,max-lisp-eval-depth以帮助找到代码可能需要强化或错误修复的地方。当然,设置debug-on-error为t应该有助于向您显示堆栈的回溯。