Obwohl Emacs (24.3.93.1) beim Starten über den Finder einwandfrei funktioniert, wenn die Terminalversion gestartet wird:
/Applications/Emacs.app/Contents/MacOS/Emacs -nw
Emacs stürzt ab mit:
Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw
.
Es scheint, dass das Problem durch eine einzelne Zeile in init.el verursacht wird.
(set-face-attribute 'default nil :font "Menlo-16")
Wenn diese Zeile auskommentiert ist, startet auch die Terminalversion von Emacs einwandfrei.
Um die Ursache des Absturzes zu lokalisieren, brauchte ich mehrere Stunden (um mein Init.el um die Hälfte zu verringern).
Mir ist bewusst, dass Emacs in jedem Fall die in der Terminal-App angegebene Schriftart und Schriftgröße erbt (im Grunde ist diese Zeile in der CLI nicht aussagekräftig).
- Gibt es im Allgemeinen eine bessere Möglichkeit, einen abstürzenden Emacs zu debuggen? Vielleicht eine Art Cli-Debugger verwenden, der eine aussagekräftigere Nachricht druckt?
- Warum stürzt diese Linie Emacs über CLI ab, aber nicht, wenn sie vom Finder aus gestartet wird?
(condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))
trotzdem habe ich den gleichen Absturz mit der gleichen Fehlermeldung. Keine zusätzlichen Nachrichten mit Elisp-Ursprung.GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.org
von emacsformacosx.com versucht und Emacs stürzt nicht ab. Es muss also ein Fehler in späteren Versionen sein. Ich werde einen Fehlerbericht einreichen.M-x report-emacs-bug
. Die Emacs-Entwickler führen Sie dann durch die Maßnahmen, die Sie zur Fehlerbehebung ergreifen können.Antworten:
Damit Sie es beim nächsten Mal nachverfolgen können
Das ist mir schon mal passiert. Es gab eine Situation, in
string-to-int
der Emacs abgestürzt war, und ich brauchte Stunden, um genau zu bestimmen.Leider kann ich keine bessere Antwort geben, aber Emacs-Abstürze treten tief im C-Code auf, und es sind keine integrierten Tools verfügbar, um solche Probleme aufzuspüren.
Ich nehme an, dass das Debuggen mit
gdb
möglich ist, aber seine Wirksamkeit hängt von Ihren Kenntnissen abgdb
.Was Sie wirklich tun müssen, ist
Einen Fehlerbericht einreichen
Reiner Elisp-Code (nicht bytekompiliert) soll Emacs niemals zum Absturz bringen. Dies kann zu einem Stillstand führen (aufgrund einer Endlosschleife) und dazu führen, dass Emacs nicht mehr über genügend Speicher verfügt. Aber darüber hinaus ist jeder Absturz ein Fehler .
Die einfache Bereitstellung dieses minimal funktionierenden Beispiels zusammen mit einer Beschreibung Ihres Builds und Systems sollte für die freundlichen Entwickler ausreichend sein.
quelle
Als Referenz für das Debuggen mit gdb möchten Sie src / temacs aus dem Build-Baum verwenden. Dies ist Emacs ohne das vorab ausgegebene Elisp, das den Debugger verwirrt.
quelle