ときどき、「ネストが「max-lisp-eval-depth」を超えています」というエラーが表示されます。
- どういう意味ですか?
- 入手したら、「killall emacs」以外に何かできることはありますか?
編集:
次のように評価すると、エラーが発生する可能性があります。
(defun func ()
(func))
(func)
ただし、この場合、emacs は応答性を維持します。
ときどき、「ネストが「max-lisp-eval-depth」を超えています」というエラーが表示されます。
次のように評価すると、エラーが発生する可能性があります。
(defun func ()
(func))
(func)
ただし、この場合、emacs は応答性を維持します。
即時の解決策は、単純に最大値を増やすことです。デフォルト値は 500 ですが、次のように 10000 に設定できます。
(setq max-lisp-eval-depth 10000)
しかし、それは一般的に良い考えではありません.なぜなら、最初に「max-lisp-eval-depth」エラーを超えるネストに遭遇するという事実は、コードの一部がスタックスペースを占有しすぎていることを示しているからです. ただし、少なくとも最大値を一時的に増やすことで、同じエラー メッセージを何度も表示することなく問題を分析することができます。
基本的に、Emacs が許可するようにコンパイルされたよりも多くのスタックを使用する Lisp コードがあることを意味します。
実際には、これは Lisp コードのバグの兆候です。アルゴリズムと入力データが「正しい」場合でも、正しく記述されたコードは、これを深くネストすることを避ける必要があります。しかし、多くの場合、未処理のまれなケースや予期しない入力が原因で発生します。
運が良ければ、control-G キーを繰り返し押すことで、Emacs を停止させることなく難問から抜け出すことができます。
max-lisp-eval-depth
Emacs Lisp コードを開発している場合、コードのハードニングやバグ修正が必要な箇所を見つけやすくするために、artificallyの値を微調整したいと思うかもしれません。そしてもちろん、にdebug-on-error
設定するt
と、スタックのバックトレースが表示されるので役立ちます。