Краще налагодження збоїв Emacs?


9

Хоча 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 успадкує незалежно від розміру шрифту та розміру шрифту в додатку терміналу (в основному цей рядок не має значення в кліпі).

  1. Взагалі кажучи, чи є кращий спосіб налагодити збій Emacs? Можливо, використовуючи якийсь налагоджувач кліпу, який надрукував би більш описове повідомлення?
  2. Чому ця лінія руйнує Emacs через cli, а не, якщо запускається з Finder?

це справді запуск із клі? або запуск термінальної версії, яка викликає проблему? Спробуйте поставити якусь помилку в обході атрибута set-face? (condition-case err (set-face-attribute ...) (помилка (повідомлення "Whoops!")))
nic ferrier

3
Подайте звіт про помилку. Emacs ніколи не повинен виходити з ладу через Lisp-код. Але це може бути проблемою з конкретною збіркою, яку ви використовуєте, чи це офіційний реліз?
Малабарба

@ nic-ferrier: Зараз у init.el у мене є лише один рядок, (condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))я все одно маю той самий збій із тим самим повідомленням про помилку. Немає додаткових повідомлень, що надсилаються на екрані.
gsl

@ malabarba: я намагався з emacsformacosx.com , і Emacs не виходить GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.orgз ладу . Отже, це має бути помилка в пізніших версіях. Я подам звіт про помилку.
gsl

1
Як зазначено @Malabarba: Файл звіту про помилку (негайно): M-x report-emacs-bug. Потім розробники Emacs проведуть вас через те, що ви можете зробити, щоб допомогти налагодити проблему.
Дрю

Відповіді:


6

Щоб допомогти вам відстежити це наступного разу

Це сталося зі мною раніше. Була ситуація, коли string-to-intрозбився Emacs, і на це також знадобилися години.
Вибачте, я не можу дати кращу відповідь, але аварії Emacs трапляються в глибині коду С, і немає вбудованих інструментів для відстеження таких проблем.

Я припускаю, що налагодити це gdbможливо, але його ефективність буде залежати від вашого знання gdb.

Те, що вам справді потрібно зробити, - це

Подайте звіт про помилку

Чистий код elisp (не байт-компільований) ніколи не повинен руйнувати Emacs. Це може призвести до зависання (через деяку нескінченну петлю), і у Emacs може не вистачити пам'яті. Але, крім цього, будь-який збій - це помилка .

M-x report-emacs-bug

Просто надання цього мінімально працюючого прикладу, який ви створили, а також опис вашої збірки та системи, має бути достатньою допомогою для добрих розробників.


2
Використання gdb було б єдиним способом. Ми могли б додати речі до Emacs, щоб обернути кожен C-виклик у щось, що самозаймається, але це буде весь час накладними. Emacs не повинен виходити з ладу, якщо це так, ми повинні спеціально обробляти цю помилку, щоб вона більше не працювала. Так, так, якщо вона зламана, подайте помилку. Використовуйте gdb будь-якими способами, щоб абсолютно точно дізнатися, де знаходиться помилка.
nic ferrier

4

В якості посилання на налагодження з gdb ви хочете використовувати src / temacs з дерева зборки. Це Emacs без попередньо скинутого elisp, який бентежить налагоджувач.

gdb --args src/temacs -nw

1
Дякую, відмінна порада (і не надто легко знайти також). Дякую.
gsl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.