Хотя Emacs (24.3.93.1) работает нормально, если запущен из Finder, если запущена версия терминала:
/Applications/Emacs.app/Contents/MacOS/Emacs -nw
Emacs падает с:
Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw
,
Кажется, проблема вызвана одной строкой в init.el,
(set-face-attribute 'default nil :font "Menlo-16")
Если эта строка закомментирована, терминальная версия Emacs тоже запустится нормально.
Чтобы точно определить причину аварии, мне потребовалось несколько часов (уменьшив мое init.el наполовину).
Я знаю, что в любом случае Emacs будет наследовать любой шрифт и размер шрифта, указанные в терминальном приложении (в основном, эта строка не имеет смысла в cli.)
- Вообще говоря, есть ли лучший способ отладить сбой Emacs? Возможно, используя какой-нибудь отладчик cli, который выводит более описательное сообщение?
- Почему эта строка разрушает Emacs через cli, но не запускается из Finder?
(condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))
но у меня та же ошибка с тем же сообщением об ошибке. Никаких дополнительных сообщений, генерирующих elisp.GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.org
от emacsformacosx.com , и Emacs не откажет. Таким образом, это должно быть ошибкой в более поздних версиях. Я подам отчет об ошибке.M-x report-emacs-bug
. Затем разработчики Emacs проведут вас через то, что вы можете сделать, чтобы помочь отладить проблему.Ответы:
Чтобы помочь вам отследить его в следующий раз
Это случилось со мной раньше. Была ситуация, когда
string-to-int
Emacs разбился, и мне потребовались часы, чтобы точно определить.Извините, я не могу дать более хороший ответ, но сбои Emacs происходят глубоко в коде C, и нет никаких встроенных инструментов, доступных для отслеживания таких проблем.
Я предполагаю, что отладка с
gdb
ним возможна, но его эффективность будет зависеть от вашего мастерства сgdb
.Что вам действительно нужно сделать, это
Подать отчет об ошибке
Чистый код elisp (не байтово скомпилированный) никогда не должен приводить к сбою Emacs. Это может вызвать зависание (из-за некоторого бесконечного цикла), и это может привести к нехватке памяти в Emacs. Но, кроме того, любой сбой является ошибкой .
Просто предоставив этот минимально работающий пример, который вы придумали, вместе с описанием вашей сборки и системы, должно быть достаточно помощи для добрых разработчиков.
источник
В качестве ссылки для отладки с помощью gdb вы можете использовать src / temacs из дерева сборки. Это Emacs без предварительно созданного elisp, что сбивает с толку отладчик.
источник