¿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ó.

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 .


(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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.