Estoy depurando por qué emacs se bloquea al usar una función de un paquete 1 . El objetivo de este proceso de depuración es obtener datos útiles para enviar utilizando M-x report-emacs-bug.
Para obtener ayuda sobre cómo depurar bloqueos de emacs, ya he consultado el Manual de Emacs - Bloqueo y el Manual de Emacs - Después de un bloqueo , pero no me ayudaron.
El manual After A Crash hace referencia, emacs-buffer.gdbpero no tengo idea de cómo usarlo. Mientras le pedía ayuda a google, me encontré con esta pregunta de emacs.SE , y volví a compilar emacs usando las -ggdb3banderas.
No tengo experiencia previa en el uso, gdbpor lo que intenté algunos intentos fallidos de usar el emacs-buffer.gbdarchivo.
Esto es lo que probé:
gdb -x /path/to/emacs-buffer.gdbgdb->file /path/to/emacs-buffer.gdbgdb->source /path/to/emacs-buffer.gdbsource /path/to/emacs-buffer.gdb
En una nota al margen, emacs compilado con la -ggdb3bandera tarda unos 10 segundos más en cargarse; antes eran 5-6 segundos, ahora unos 16-17 segundos. Sé los segundos exactos debido a un código que calcula eso en mi init. ¿Se espera este aumento en el tiempo de inicio?
Nota 1: emacs se bloquea constantemente cuando undo-treeintenta restaurar el historial de deshacer para un archivo .org en particular (que no puedo compartir públicamente). Tengo (setq undo-tree-auto-save-history t). Este bloqueo ocurre solo en emacs git master, no en emacs 24.5. En emacs 24.5, undo-treearroja un error que indica que no puede cargar el historial de deshacer (incluso a través del archivo de historial de deshacer existe), pero al menos la sesión de emacs no se bloquea en esa versión.

undue-treeproblemas, pero tiene un potencial más amplio .undo-treerespuesta específica porque sé que sería difícil para cualquier otra persona recrear ese bloqueo exacto. Además, no puedo compartir todo el archivo de organización, que es el único que parece causar este bloqueo. Entonces apliqué solo lagdbetiqueta a esta pregunta. Di esa historia de fondo para que las respuestas me guíen cómo depurar un bloqueo de emacs en general para que pueda presentar un informe de error útil de emacs .Respuestas:
La forma más fácil de depurar un bloqueo de Emacs es iniciar Emacs debajo
gdby luego hacer cualquier cosa que reproduzca el bloqueo.Suponiendo que está construyendo sus Emacs desde la fuente, debe pasar
CFLAGS="-O0 -g3"al./configurescript. Esto hace que el compilador de C desactive las optimizaciones (lo que puede hacer que las cosas sean confusas durante la depuración) y activa la información de depuración máxima en el ejecutable. Corremakepara construir Emacs.Luego, comience
gdbdesde dentro delsrcdirectorio de su árbol Emacs:En OSX, querrá pasar
--with-nsal./configurescript e iniciar gdb en Emacs dentro de la aplicación creada:La razón para comenzar desde el
srcdirectorio es que hay un.gdbinitarchivo que configura definiciones útiles de funciones GDB para depurar Emacs. Si ese archivo se cargó, debería ver algo como esto al comenzargdb:Escriba
rpara iniciar Emacs. Puede pasar argumentos adicionales en la misma línea, por ejemplor --debug-init.Luego intente hacer que Emacs se bloquee. Si se bloquea, debería ver una nota al respecto
gdby volverá a aparecer en el(gdb)mensaje. Si Emacs no se bloquea, pero se congela, puede presionarC-zen el terminal donde se está ejecutandogdbpara volver al indicador.Una vez que se le solicite, escriba
btpara obtener una traza inversa. Como beneficio adicional, si el.gdbinitarchivo Emacs se cargó correctamente, verá una traza inversa de Lisp después de la traza trasera de C. Ambas trazas son cosas muy útiles para incluirM-x report-emacs-bug.Hay mucha más información, incluyendo cómo examinar el estado de las variables, etc., en el
etc/DEBUGarchivo en el árbol de Emacs. Puede abrirlo escribiendoC-h C-ddentro de Emacs, o puede leerlo en línea .fuente
emacs-buffer.gdbhace y cómo usarlo.src/.lib-src/Sin embargo, lo encontré pero esto no funcionógdb ./emacsclient -a '' -c. Así que necesito ayuda sobre cómo pasar esos-ay-cargumentos a emacsclient en lugar de a gdb.