2009-08-24 3 views
23

Ich habe die folgenden Fehler immer in Emacs zufällig worden:Spur max-specpdl-Größe Fehler in Emacs

Variable Bindungstiefe überschreitet max-specpdl-Größe

... und Ich habe es in sehr zufälligen Momenten bekommen. Nach dieser Untersuchung scheint es, als würde irgendwo ein Elisp zu tief rekurrieren. Gibt es Strategien, dies zu verfolgen? Ich bin total ratlos, was das eigentlich verursacht.

Ich habe einige Fehler anzeigt, etwas entlang der Linien der unendlichen Rekursion mit ropemacs bekommen (aber diese sind in der Regel Fehler Python). Könnte etwas mit Ropemacs falsch konfiguriert werden?

Update: Interessanterweise habe ich festgestellt, dass ich immer diesen Fehler bekomme, wenn ich eine "C-h a" für "Speedbar" aber nicht für "Seil-".

Antwort

16

Um das Problem aufzuspüren, können Sie dies versuchen:

(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 

Sie einen Backtrace auf den Fehler bekommen sollte, und an diesem Punkt können Sie die fehlerhafte Routine aufzuspüren.

Ich würde auch versuchen, emacs w/out Ihre Konfigurationsdatei (emacs -q), um zu sehen, ob es etwas in Ihren .emacs, die Dinge betrifft. (Ich bekomme nicht die Endlosschleife mit C-h a). Und wenn es .emacs ist, dann ist die beste Weise, die ich gefunden habe, dass die Spur entweder binäre Suche (put einen Fehler (error "frog"), etc. zu jagen in der Mitte Ihrer .emacs, Last, Test, wenn keine Probleme, setzen Sie den Fehler bei 3/4, ansonsten bei 1/4, wiederhole ...), oder werte deine .emacs Zeile für Zeile (Region für Region) aus und teste nach jeder Portion. Diese Einstellungen sollten helfen.

+0

Natürlich nicht. Wünschte, SO hätte während der Bearbeitung ein 'diff' Dienstprogramm, ich wollte sehen, wo ich mich aufhalte. –

+0

Sie hatten 'debug-on-errot'. Wenn Sie auf den Link neben meinem gravatar klicken (z. B. '5 Stunden'), können Sie das Diff sehen. Oder meinst du etwas anderes? – seth

+0

Ich versuchte dies und es hat nicht funktioniert: Ich habe den Wert abgewiesen zu fünf und hatte Debug-on-Fehler T, aber Emacs haben mich nicht in den Debugger fallen: Statt die übliche Fehlermeldung nur gedruckt. Dies passiert, wenn der Fehler in einer Auto-Indenting-Funktion auftritt. Könnte das den Debug-on-error beeinträchtigen? –

2

Auch für mich hat es nicht funktioniert. Ich fand mit C-h + v, dass eigentlich max-specpdl-size wurde nicht geändert, um 5 überhaupt durch die setq. Ich habe dann versucht es mit M-xset-variable interaktiv einzustellen. Auch das hat seinen Wert nicht verändert. Schließlich habe ich es geschafft, es mit M-xcustomize-variable zu setzen.

Btw, auf meinem System war max-specpdl-size140 und damit zu klein. Ich musste es auf 1000 erhöhen, nicht um ein Backtrace zu bekommen und es zu debuggen, aber um es zu arbeiten.