Aquí hay un ejemplo mínimo de trabajo para demostrar el problema, deberá tener el use-packagepaquete instalado:
(use-package ido
:config
(progn
(defun dummy/function ()
(interactive)
(message "I am in the dummy function."))))
Cuando intento agregar instrumentación de edebug al dummy/functionuso M-x edebug-defun, se inicia el edebug de inmediato como si ya lo hubiera hecho M-x dummy/function. Tengo que dejar eso golpeando q. Pero cuando realmente lo hago M-x dummy/function, no veo la activación de edebug.
¿Hay algo sobre el use-packagecontenedor que se mete con la instrumentación de edebug? ¿Cómo se puede arreglar?
use-package
edebug
Kaushal Modi
fuente
fuente

dummy/functionen el nivel superior (es decir, fuera de use-package) soluciona el problema inmediato? He dejado de usar funciones lambda anónimas a favor de funciones con nombre para tratar problemas similares en los ganchos de modo.use-packagecontenedor se pueden depurar bien. Me gustaría envolver todo lo relacionado con el paquete X dentro(use-package X ..), incluidas mis funciones personalizadas relacionadas con X. Pero si edebug de esas funciones es un problema, entonces necesitaría repensar mi organización de código ...M-x report-emacs-bug. Esté preparado para proporcionar una receta simple que comience desdeemacs -Q.edebug-defundepura la forma de nivel superior, que en este caso es la(use-package ...)propia en lugar de la defun que está pasando a lause-packagemacro. ¿Puedes usaredebug-on-entryy dar el nombre de la función que has definido?debug, noedebug. Por ejemplo,M-x debug-on-entry. HTH.Respuestas:
Cuando lo llama
edebug-defun, depura el formulario de nivel superior, que en este caso es(use-package ...).Puede usar
debug-on-entrypara depurar una función con nombre.fuente
narrow-to-region)edebug-defun)widen)Si te gusta hacer las cosas rápidamente, atajo lispy para esto es N xe W.
fuente
narrow-to-defunreduce a la misma(use-package ...)forma queedebug-defunencuentra. Sin embargo, funciona si marca el defun primero y lo usanarrow-to-region.narrow-to-defun.lispy'sNselecciona región y llamanarrow-to-region.edebug-defunGracias a @ abo-abo por el consejo para marcar el defun primero.
Aquí hay una forma rápida de habilitar / deshabilitar
edebug-defun. Esto se usasearch-backward-regexppara edebug-instrument o evaluar el nombre defun o defmacro correctamente, ya sea que esté definido en eluse-packagecontenedor o no.Uso : con el punto en cualquier lugar de la función / cuerpo de macro, la llamada
modi/toggle-edebug-defunhabilitará o deshabilitaráedebugesa entidad.debug-on-entryGracias a @glucas y @Drew, he preparado una forma conveniente de alternar
debug-on-entry. Esto también utiliza el mismo enfoque que el anterior para analizar el nombre defun / defmacro.Uso : con el punto en cualquier parte del cuerpo de la función, la llamada
modi/toggle-debug-defunhabilitará o cancelará ladebug-on-errorfunción.fuente