Chociaż Emacs (24.3.93.1) działa dobrze, jeśli zostanie uruchomiony z Findera, jeśli wersja terminalu zostanie uruchomiona:
/Applications/Emacs.app/Contents/MacOS/Emacs -nw
Emacs ulega awarii z:
Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw
.
Wygląda na to, że przyczyną problemu jest pojedyncza linia w init.el,
(set-face-attribute 'default nil :font "Menlo-16")
Jeśli linia ta zostanie skomentowana, terminalowa wersja Emacsa również zacznie działać poprawnie.
Ustalenie przyczyny awarii zajęło mi kilka godzin (zmniejszając mój init.el o pół).
Wiem, że w każdym przypadku Emacs odziedziczy dowolną czcionkę i rozmiar czcionki określony w aplikacji terminalowej (w zasadzie ta linia nie ma znaczenia w cli.)
- Mówiąc ogólnie, czy jest lepszy sposób na debugowanie awarii Emacsa? Być może przy użyciu jakiegoś debugera CLI, który wydrukowałby bardziej opisowy komunikat?
- Dlaczego ta linia powoduje awarię Emacsa przez cli, ale nie jest uruchamiana z Findera?
(condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))
wciąż mam tę samą awarię z tym samym komunikatem o błędzie. Brak dodatkowych wiadomości pochodzących z elisp.GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.org
od emacsformacosx.com i Emacs nie psuje. W późniejszych wersjach musi to być błąd. Zgłoszę błąd.M-x report-emacs-bug
. Programiści Emacsa poprowadzą cię przez to, co możesz zrobić, aby pomóc w debugowaniu problemu.Odpowiedzi:
Aby pomóc Ci to wyśledzić następnym razem
Zdarzyło mi się to wcześniej. Była sytuacja, w której
string-to-int
rozbił się Emacs, a także zajęło mi wiele godzin.Niestety nie mogę podać lepszej odpowiedzi, ale awarie Emacsa zdarzają się głęboko w kodzie C i nie ma żadnych wbudowanych narzędzi do śledzenia takich problemów.
Wydaje mi się, że debugowanie go
gdb
jest możliwe, ale jego skuteczność będzie zależeć od twojej biegłości w posługiwaniu się nimgdb
.To, co naprawdę musisz zrobić, to
Złóż raport o błędzie
Czysty kod elisp (nieskompilowany bajtowo) nigdy nie powinien powodować awarii Emacsa. Może to spowodować zawieszenie się (z powodu nieskończonej pętli) i może spowodować brak pamięci w Emacsie. Ale poza tym każda awaria jest błędem .
Wystarczy podać ten minimalnie działający przykład, który wymyśliłeś, wraz z opisem twojej kompilacji i systemu, powinien być wystarczającą pomocą dla tego rodzaju programistów.
źródło
Jako odniesienie do debugowania z gdb będziesz chciał użyć src / temacs z drzewa kompilacji. To jest Emacs bez wstępnie zrzuconego elipa, który dezorientuje debugger.
źródło