Aunque Emacs (24.3.93.1) funciona bien si se inicia desde el Finder, si se inicia la versión del terminal:
/Applications/Emacs.app/Contents/MacOS/Emacs -nw
Emacs se bloquea con:
Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw
.
Parece que el problema es causado por una sola línea en init.el,
(set-face-attribute 'default nil :font "Menlo-16")
Si esa línea se comenta, la versión de terminal de Emacs también comenzará bien.
Identificar la causa del accidente me llevó varias horas (disminuyendo mi init.el mitad por mitad).
Soy consciente de que, en cualquier caso, Emacs heredará cualquier fuente y tamaño de fuente especificado en la aplicación de terminal (básicamente, esa línea no es significativa en el cli).
- En términos generales, ¿hay una mejor manera de depurar un Emacs que falla? ¿Quizás utilizando algún tipo de depurador de cli que imprima un mensaje más descriptivo?
- ¿Por qué esa línea bloquea Emacs a través de cli, pero no si se inicia desde Finder?
(condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))
todavía tengo el mismo bloqueo con el mismo mensaje de error. No hay mensajes adicionales de origen de elisp.GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.org
de emacsformacosx.com , y Emacs no se desplome. Por lo tanto, debe ser un error en versiones posteriores. Presentaré un informe de error.M-x report-emacs-bug
. Los desarrolladores de Emacs lo guiarán a través de lo que puede hacer para ayudar a depurar el problema.Respuestas:
Para ayudarte a rastrearlo la próxima vez
Esto me sucedió antes. Hubo una situación en la que se
string-to-int
estrelló Emacs, y también me llevó horas identificarlo.Lo siento, no puedo proporcionar una mejor respuesta, pero los bloqueos de Emacs ocurren en el fondo del código C, y no hay herramientas integradas disponibles para rastrear tales problemas.
Supongo que
gdb
es posible depurarlo, pero su efectividad dependerá de su competenciagdb
.Lo que realmente necesitas hacer es
Presentar un informe de error
Se supone que el código elisp puro (sin compilación de bytes) nunca bloquea Emacs. Podría provocar un bloqueo (debido a un bucle infinito) y podría hacer que Emacs se quede sin memoria. Pero, más allá de eso, cualquier accidente es un error .
Simplemente proporcionar este ejemplo de trabajo mínimo que se le ocurrió, junto con una descripción de su compilación y sistema, debería ser suficiente ayuda para los amables desarrolladores.
fuente
Como referencia para depurar con gdb, querrá usar src / temacs del árbol de compilación. Este es Emacs sin el elisp pre-descargado que confunde al depurador.
fuente