32

emacsで次のエラーがランダムに発生しています。

変数バインディングの深さが max-specpdl-size を超えている

...そして、私は非常にランダムな瞬間にそれを取得しています。これを調査した後、どこかの elisp の再帰が深すぎるようです。これを追跡するための戦略はありますか? 実際にこれを引き起こしているものに関する限り、私は完全に途方に暮れています。

私は、ropemacs の無限再帰に沿った何かを示すいくつかのエラーを受け取りました (しかし、これらは通常 Python エラーです)。ロープマックで何かが間違って設定されている可能性はありますか?

更新: 興味深いことに、「rope-」ではなく「speedbar」に対して「Ch a」を実行すると、常にこのエラーが発生することがわかりました。

4

3 に答える 3

23

問題を追跡するには、これを試すことができます。

(setq max-specpdl-size 5)  ; default is 1000, reduce the backtrace level
(setq debug-on-error t)    ; now you should get a backtrace
C-h a ; in speedbar

エラー時にバックトレースを取得する必要があり、その時点で、問題のあるルーチンを追跡できます。

また、構成ファイルなしでemacsをロードしてみます(emacs -q)、.emacsに何か影響を与えているものがあるかどうかを確認します。(を使用して無限ループを取得しませんC-h a)。そして、それがあなたの.emacsである場合、それを追跡するために私が見つけた最良の方法は、バイナリ検索です((error "frog").emacsの途中にエラーまたは何かを配置し、ロードし、テストし、問題がなければエラーを3/4、それ以外の場合は 1/4、繰り返し...)、または手動で .emacs を 1 行ずつ (地域ごとに) 評価し、各部分の後にテストします。これらの設定が役立つはずです。

于 2009-08-24T15:11:25.940 に答える
3

私にとってもそれはうまくいきませんでした。C-h+vで実際にmax-specpdl-sizeはまったく変更されていないことがわかりまし5setq。次に、でインタラクティブに設定しようとしましたM-x set-variable。それもその価値を変えませんでした。最後に、私はそれを設定することができましたM-x customize-variable

ところで、私のシステム max-specpdl-sizeでは140小さかったためです。1000バックトレースを取得してデバッグするためではなく、機能させるために、に増やす必要がありました。

于 2012-10-10T12:25:02.560 に答える