Wie man Helm debuggt

7

Ich habe einige Probleme mit dem Ruder, daher habe ich mich debug-on-errorbemüht, das Problem zu lokalisieren. Immer wenn das Problem auftritt, wird der *Backtrace*Puffer wie erwartet angezeigt, aber ich bin immer noch in einem der Hauptmodi des Ruders und kann nicht im Backtrace-Puffer navigieren und normal debuggen.

Der Hauptmodus verwendet immer noch den Minibuffer und scheint auch meine Schlüsselsequenzen zu "stehlen" und mich am Debuggen zu hindern. Wenn ich den helm-mulit-occurlaufenden Vorgang beende, wird der Backtrace-Puffer gelöscht und ich kann das Debuggen nicht fortsetzen.

Gibt es eine Möglichkeit, einen Hauptmodus anzuhalten, während der elisp-Debugger ausgeführt wird, damit ich wie gewohnt debuggen kann?

Nispio
quelle
Welche Funktion löst die Rückverfolgung aus? Ich habe debug-on-entryon verwendet helm(Debug-on-Error wurde nicht ausgelöst, da keine Fehler aufgetreten sind) und kann weiterhin debuggen.
Vamsi
@Vamsi: Ich verwende helm-multi-occurund der spezifische Fehler, der einige Zeit nach dem erfolgreichen Ausführen des Helms auftritt, ist helm-interpret-value: Symbol must be a function or a variable.
Nispio
Binden Sie in der Keymap dieses Hauptmodus die Taste f5 an ein anderes Fenster. Dann sollten Sie in der Lage sein, davon wegzuschalten. Setzen Sie außerdem enable-recursive-minibuffers auf t.
Malabarba
@ Malabarba: Der Befehl other-windowmacht in diesem Modus nichts und der Minibuffer scheint immer den Fokus zu haben. C-h mist dem Befehl zugeordnet, helm-helpaber das manuelle Ausführen describe-modesagt mir, dass ich in bin minibuffer-inactive-mode.
Nispio
1
Wenn Sie sich die Rückverfolgung ansehen, sollten Sie in der Lage sein zu erkennen, welche Funktion den Helminterpretationswert aufruft. Dann können Sie es Edebug und herausfinden, was passiert.
Malabarba

Antworten:

3

Der Befehl helm-toggle-suspend-updateist C-!standardmäßig gebunden . Das Ruder wird nicht geschlossen oder das rekursive Update wird beendet, aber der Rudermodus wird vorübergehend weniger "invasiv". Durch das Anhalten von Updates wird verhindert, dass das Ruder alle Tastatur- und Mauseingaben "stiehlt". Auf diese Weise können Sie den Ruderprozess in einem anderen Fenster debuggen.

Nispio
quelle
2

Es ist nicht möglich, einen Hauptmodus anzuhalten, aber wie in den Kommentaren zu Ihren Fragen vorgeschlagen, sollte es möglich sein, sich von dem Puffer, der den Fehler ausgelöst hat, zum Backtrace-Puffer zu entfernen. Wenn der Modus des Puffers, in dem der Fehler aufgetreten ist, die normalen globalen Bindungen überschreibt, um in einen anderen Puffer zu wechseln , können Sie durch Hinzufügen des Schlüssels explizit zu seiner Keymap möglicherweise wieder einen anderen Puffer auswählen.

Es ist jedoch auch möglich, dass der Modus Benutzereingaben auf schickere Weise liest, sodass es unmöglich ist, sich zu entfernen. Im Falle eines solchen Abschlusspuffers / -modus helmkönnte dies sinnvoll sein.

Möglicherweise können Sie jedoch einfach beenden helmund dann zu gehen *Backtrace*. Der Puffer wird nicht mehr in einem Fenster angezeigt, sollte aber noch vorhanden sein und die neueste Rückverfolgung enthalten. Sie erwähnen, dass der "Backtrace-Puffer gelöscht wird"; verschwindet der Puffer einfach oder wird sein Inhalt wirklich gelöscht? Im letzteren Fall möchten Sie möglicherweise ein Problem im helmRepository öffnen , da dies als Fehler angesehen werden kann.

Tarsius
quelle
Während das Ruder noch aktiv ist, habe ich versucht, in den Backtrace-Puffer zu klicken, Schlüsselsequenzen neu zu binden und M-x other-windowdirekt aufzurufen , aber keines davon ermöglicht es mir, den Fokus vom Minibuffer für die Fertigstellung des Ruders zu entfernen. Wenn der Backtrace-Puffer zum ersten Mal angezeigt wird, ist dies das aktive Fenster, aber fast jeder Tastendruck wird vom Ruder "gestohlen" und bringt mich zurück in den Abschlussmodus. Wenn ich das Ruder verlasse, wird C-gder Backtrace-Puffer gelöscht, ohne dass Informationen rückgängig gemacht werden.
Nispio
1
Klingt so, als ob helm eine rekursive Bearbeitung verwendet (siehe (elisp)Recursive Editing. Sinnvoll für ein Paket wie helm, bedeutet aber auch, dass das Beenden helm(durch regelmäßiges Aufrufen eines Befehls oder Abbrechen in Ihrem Fall) zur vorherigen Ebene zurückkehrt, wodurch die aktuelle Ebene verloren geht Sie waren also völlig auf dem richtigen Weg. Vielleicht bietet das Ruder bereits eine Lösung für dieses Problem, überprüfen Sie die FAQ, andernfalls öffnen Sie ein Problem. M-x fundamental-modeMöglicherweise funktioniert es auch, obwohl es auch möglich ist, dass dies den Modus im falschen Puffer ändert.
Tarsius
1
Fehler beim Parsen des vorherigen Kommentars: nicht übereinstimmende Klammer. ;-)
Nispio
Ich weiß nicht wirklich, was du damit meinst.
Tarsius
Bitte ändern Sie den Titel. In den meisten Fällen verursacht das "Debuggen der Hauptmodi" keine Probleme. Dieses Problem ist sehr spezifisch für das Ruder.
Tarsius