Hier ist ein Mindestarbeitsbeispiel, um das Problem zu demonstrieren. Sie müssen das use-package
Paket installiert haben:
(use-package ido
:config
(progn
(defun dummy/function ()
(interactive)
(message "I am in the dummy function."))))
Wenn ich versuche, der dummy/function
Verwendung eine Edebug-Instrumentierung hinzuzufügen M-x edebug-defun
, wird der Edebug sofort gestartet, als ob ich es bereits getan hätte M-x dummy/function
. Ich muss das durch Schlagen beenden q
. Aber wenn ich es tatsächlich tue M-x dummy/function
, sehe ich nicht, dass der Edebug aktiviert wird.
Gibt es etwas an dem use-package
Wrapper, das mit der Edebug-Instrumentierung in Konflikt gerät? Wie kann es behoben werden?
use-package
edebug
Kaushal Modi
quelle
quelle
dummy/function
behebt das Definieren auf oberster Ebene (dh außerhalb des Use-Package) das unmittelbare Problem? Ich habe die Verwendung anonymer Lambda-Funktionen zugunsten benannter Funktionen eingestellt, um ähnliche Probleme bei Mode-Hooks zu lösen.use-package
Wrappers definiert sind, können problemlos edebuggt werden. Ich möchte alles, was mit Paket X(use-package X ..)
zu tun hat, einpacken, einschließlich meiner benutzerdefinierten Funktionen, die sich auf X beziehen. Wenn jedoch ein Fehler in diesen Funktionen auftritt, muss ich meine Code-Organisation überdenken.M-x report-emacs-bug
. Seien Sie bereit, ein einfaches Rezept bereitzustellen, das von beginntemacs -Q
.edebug-defun
debuggt das Top-Level-Formular, das in diesem Fall(use-package ...)
eher das Selbst als das Defun ist, das Sie an dasuse-package
Makro übergeben. Können Sieedebug-on-entry
den Namen der von Ihnen definierten Funktion verwenden und angeben?debug
, nichtedebug
. Zum BeispielM-x debug-on-entry
. HTH.Antworten:
Wenn Sie es aufrufen
edebug-defun
, debuggt das Formular der obersten Ebene, in diesem Fall(use-package ...)
.Sie können
debug-on-entry
eine benannte Funktion debuggen.quelle
narrow-to-region
) aufedebug-defun
)widen
)Wenn Sie es mögen, Dinge schnell zu erledigen , ist dies eine lispige Abkürzung N xe W.
quelle
narrow-to-defun
sich auf dieselbe(use-package ...)
Form beschränkt, die esedebug-defun
findet. Es funktioniert jedoch, wenn Sie zuerst den Defun markieren und verwendennarrow-to-region
.narrow-to-defun
.lispy
‚sN
wählt Region und fordertnarrow-to-region
.edebug-defun
Vielen Dank an @ abo-abo für den Tipp, zuerst den Defun zu markieren.
Hier ist eine schnelle Möglichkeit zum Aktivieren / Deaktivieren
edebug-defun
. Dies wird verwendetsearch-backward-regexp
, um den defun- oder defmacro-Namen korrekt zu edebug-instrumentieren oder auszuwerten, unabhängig davon, ob er imuse-package
Wrapper definiert ist oder nicht.Verwendung - Mit dem Punkt an einer beliebigen Stelle im Funktions- / Makrokörper wird der Aufruf für diese Entität
modi/toggle-edebug-defun
aktiviert oder deaktiviertedebug
.debug-on-entry
Dank @glucas und @Drew habe ich mir eine bequeme Möglichkeit zum Umschalten ausgedacht
debug-on-entry
. Dies verwendet auch den gleichen Ansatz wie oben, um den Namen defun / defmacro zu analysieren.Verwendung - Wenn sich der Punkt an einer beliebigen Stelle im Funktionskörper befindet, wird durch Aufrufen die Funktion für diese Funktion
modi/toggle-debug-defun
aktiviert oder abgebrochendebug-on-error
.quelle