2016-03-24 13 views
2

Wenn ich den globalen Debug-Modus zum ersten Mal in einer Emacs-Sitzung umschalte und versuche, ein Stück ungültigen Lisp zu starten, erscheint das Backtrace-Fenster. Wenn ich jedoch dieses Fenster schließe und den Backtrace-Puffer lösche und dann versuche, einen weiteren Teil ungültiger Elisp auszuführen, wird der Backtrace-Puffer nicht mehr erzeugt, und es erscheint kein Fenster mehr. Ich habe durch das Handbuch geschaut, um herauszufinden, warum dies ohne Erfolg geschieht, jede Hilfe wäre sehr geschätzt.Elisp Debugger wird nicht angezeigt

+2

Vielleicht befinden Sie sich immer noch in 'rekursive-edit', was normalerweise in der Modus-Zeile von' ['und'] 'zu sehen ist. Sie müssen den 'recursive-edit' beenden, bevor der' * backtrace * 'Puffer wieder erscheint. Das Auswerten von '(Top-Level)' funktioniert und es gibt andere Methoden, um den Debugger ordnungsgemäß zu beenden. – lawlist

+0

Danke! Das war in der Tat das Problem. Ich werde auf rekursive Bearbeitung lesen müssen. Dies geschieht, wenn ich den Puffer anstelle von q drücke, so nehme ich die Funktion an, die der Schlüssel lokal gebunden ist, um die rekursive Bearbeitung zu beenden. –

+0

Um die Schlüssel in der Debugger-Modus-Map zu sehen, können Sie 'M-x Beschreibungsmodus RET' eingeben, während der Punkt im '* Backtrace *' - Puffer liegt. Oder Sie können es jederzeit sehen, indem Sie 'M-x beschreiben-Variable RET Debugger-Modus-Map RET 'eingeben. In diesem speziellen Fall ist "q" an die "oberste Ebene" gebunden. Die Funktion 'exit-recursive-edit' wird nur auf einer Ebene zurückgesetzt - es können viele Ebenen aktiv sein. Die Funktion 'abort-recursive-edit' beendet alle Ebenen. Die Funktion 'top-level' hat eine doc-Zeichenkette, die besagt:" * Alle rekursiven Bearbeitungsebenen verlassen. Dies beendet auch alle aktiven Minibuffer. * " – lawlist

Antwort

2

Das Problem ist, dass die *Backtrace* Puffer Töten Sie den Debugger verlassen nicht wirklich machen (im Gegensatz c oder q zu schlagen), so dass Sie immer noch in der rekursiven bearbeiten sind, wo weitere Debuggen deaktiviert ist (so wie Springen zu vermeiden weiter in den Debugger Ad-Nauseam).

Ich empfehle Ihnen, C-] zu verwenden, um aus dieser Situation herauszukommen. Aber ich empfehle auch, dass Sie dies mit M-x report-emacs-bug ablegen, da es sinnvoll wäre, den Debugger zu beenden, wenn der Backtrace-Puffer beendet wird.

+0

+1. Außerdem: (1) Wenn die aktuelle rekursive Bearbeitung ein Backtrace-Puffer ist, können Sie 'C-x 4 b * Backtrace *' verwenden, um sie zu besuchen. (2) 'M-x top-level' bringt Sie auf die oberste Ebene und verlässt die * alle * Ebenen rekursiver Bearbeitungen. – Drew