Embora o Emacs (24.3.93.1) funcione bem se for iniciado a partir do Finder, se a versão do terminal for iniciada:
/Applications/Emacs.app/Contents/MacOS/Emacs -nw
O Emacs trava com:
Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw
.
Parece que o problema foi causado por uma única linha no init.el,
(set-face-attribute 'default nil :font "Menlo-16")
Se essa linha for comentada, a versão do terminal do Emacs também começará bem.
Para identificar a causa do acidente, levei várias horas (diminuindo meu init.el pela metade).
Estou ciente de que, em qualquer caso, o Emacs herdará qualquer fonte e tamanho de fonte especificados no aplicativo de terminal (basicamente, essa linha não é significativa no CLI).
- De um modo geral, existe uma maneira melhor de depurar um Emacs com falha? Talvez usando algum tipo de depurador cli que imprima uma mensagem mais descritiva?
- Por que essa linha está travando o Emacs via CLI, mas não se for lançada a partir do Finder?
(condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))
ainda tenho a mesma falha com a mesma mensagem de erro. Nenhuma mensagem adicional originada no elisp.GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.org
a partir emacsformacosx.com , e não Emacs não falhar. Portanto, deve ser um bug nas versões posteriores. Vou registrar um relatório de bug.M-x report-emacs-bug
. Os desenvolvedores do Emacs o guiarão pelo que você pode fazer para ajudar a depurar o problema.Respostas:
Para ajudá-lo a acompanhar da próxima vez
Isso aconteceu comigo antes. Houve uma situação em que
string-to-int
caiu o Emacs, e levei horas para localizar também.Desculpe, mas não posso fornecer uma resposta melhor, mas as falhas do Emacs ocorrem no fundo do código C, e não há ferramentas internas disponíveis para rastrear esses problemas.
Suponho que a depuração
gdb
seja possível, mas sua eficácia dependerá da sua proficiênciagdb
.O que você realmente precisa fazer é
Arquivar um relatório de bug
O código elisp puro (sem compilação de bytes) nunca deve travar o Emacs. Isso pode causar um travamento (devido a algum loop infinito) e o Emacs fica sem memória. Mas, além disso, qualquer falha é um bug .
Simplesmente fornecer este exemplo minimamente elaborado, juntamente com uma descrição de sua construção e sistema, deve ser ajuda suficiente para os desenvolvedores gentis.
fonte
Como referência para depurar com o gdb, você deve usar o src / temacs na árvore de construção. Este é o Emacs sem o elisp pré-despejado que confunde o depurador.
fonte