¿Interrumpir la evaluación y observar la pila actual en el depurador emacs-lisp?

17

Si algunas funciones de emacs-lisp, como un enlace de modo mayor, tardan más de lo esperado en ejecutarse, a veces me gustaría interrumpirlo y ver la pila actual. Idealmente, también me gustaría poder ver valores variables, y así sucesivamente, en el depurador. No estoy hablando de código que estoy ejecutando deliberadamente en modo emacs-lisp, sino de código que se ejecuta en el funcionamiento normal de emacs.

¿Cómo puedo interrumpir la ejecución del código emacs-lisp directamente en emacs? No sé de antemano qué función necesito para depurar.

Por ejemplo, escribir C-g, aunque interrumpe la ejecución, tampoco me dice nada sobre qué función se interrumpió.

Kirill
fuente

Respuestas:

18

Puede C-gactivar el depurador activando debug-on-quit. Solo haz

M-x toggle-debug-on-quit

Ahora, cada vez que golpeas C-g, obtendrás un seguimiento de lo que estaba sucediendo. Esta traza inversa es interactiva, por lo que puede seguir avanzando por la función con d, y puede comenzar a moverse con ella c. (Pruébalo, es más fácil ver que leer).

Esta es la misma traza inversa que obtienes al agregar (debug)dentro de tu código. Aquí hay una breve publicación en el blog y la página del manual de Elisp correspondiente .

Malabarba
fuente
(dice mansamente hello);) Nota impresionante de que el depurador es interactivo - Nunca pensé en verificar eso :)
Sean Allred
@SeanAllred sí, solo me enteré hace un par de semanas.
Malabarba