13

ときどき、「ネストが「max-lisp-eval-depth」を超えています」というエラーが表示されます。

  • どういう意味ですか?
  • 入手したら、「killall emacs」以外に何かできることはありますか?

編集:

次のように評価すると、エラーが発生する可能性があります。

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

ただし、この場合、emacs は応答性を維持します。

4

2 に答える 2

13

即時の解決策は、単純に最大値を増やすことです。デフォルト値は 500 ですが、次のように 10000 に設定できます。

(setq max-lisp-eval-depth 10000)

しかし、それは一般的に良い考えではありません.なぜなら、最初に「max-lisp-eval-depth」エラーを超えるネストに遭遇するという事実は、コードの一部がスタックスペースを占有しすぎていることを示しているからです. ただし、少なくとも最大値を一時的に増やすことで、同じエラー メッセージを何度も表示することなく問題を分析することができます。

于 2012-08-06T02:05:13.753 に答える
4

基本的に、Emacs が許可するようにコンパイルされたよりも多くのスタックを使用する Lisp コードがあることを意味します。

実際には、これは Lisp コードのバグの兆候です。アルゴリズムと入力データが「正しい」場合でも、正しく記述されたコードは、これを深くネストすることを避ける必要があります。しかし、多くの場合、未処理のまれなケースや予期しない入力が原因で発生します。

運が良ければ、control-G キーを繰り返し押すことで、Emacs を停止させることなく難問から抜け出すことができます。

max-lisp-eval-depthEmacs Lisp コードを開発している場合、コードのハードニングやバグ修正が必要な箇所を見つけやすくするために、artificallyの値を微調整したいと思うかもしれません。そしてもちろん、にdebug-on-error設定するtと、スタックのバックトレースが表示されるので役立ちます。

于 2012-08-04T09:17:24.660 に答える