Как отлаживать ошибки в часовых и во время font-lock

10

Когда ошибка возникает в процесс-стороже или во время блокировки шрифта, Emacs не показывает обратный след, даже если он debug-on-errorбыл ранее включен.

Я понимаю, почему эти ошибки обнаруживаются, та же ошибка может быть вызвана снова при попытке представить обратную трассировку. Однако, когда я хочу отладить эту ошибку, это не очень полезно. Я бы предпочел рискнуть Emacs перестать отвечать на запросы, чем работать с этим:

error in process sentinel: Wrong type argument: stringp, nil

В конце концов, я могу просто запустить второй экземпляр, если первый начнет сходить с ума. Немного больше контекста помогло бы, когда есть много мест, где такая ошибка может теоретически возникнуть в часовом.

Итак, как я могу заставить Emacs показывать обратный след даже в тех случаях, когда debug-on-errorэто не имеет никакого эффекта?

Tarsius
источник
1
Я видел emacs.stackexchange.com/questions/3552/… но думаю, что в целом должен быть вопрос об этом, а не один конкретный случай. Также я очень надеюсь, что «использовать printf» - не единственный ответ, потому что это то, что я использовал в прошлом, и это не удовлетворяет, особенно если ошибка «Недопустимая ссылка на лицо: some-face-which-i-абсолютно-know» -exists ", что может быть вызвано почти каждым установленным мною пакетом.
tarsius
URL-адрес указывает на этот вопрос, и поэтому он довольно запутан в вашем комментарии, является ли он преднамеренным или ошибкой от вашего имени?
васамаса
Это проблема, которую я имел в виду: ttp: //emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius
ссылка Tarsius предназначена: emacs.stackexchange.com/questions/1045/... UG-INIT-нет-нет-эффекта
dcorking

Ответы:

10

Для стражей процесса, я не думаю, что есть веская причина. Я думаю, что это просто отсутствующая функция, поэтому я предлагаю вам M-x report-emacs-bug.

С блокировкой шрифтов проблема более сложная, потому что на самом деле происходит то, что ошибка вызывается во время jit-lock, то есть во время повторного отображения, и мы не можем легко войти в отладчик в этот момент (IIRC в какой-то момент пытался сделать Герд это работает, но были некоторые серьезные проблемы, все еще). Таким образом, вы можете отладить его одним из следующих способов:

  • M-x jit-lock-debug-mode который изменяет jit-lock для запуска сразу после повторного отображения, чтобы мы могли войти в отладчик.
  • M-: (setq font-lock-support-mode nil) RETа затем отключить + включить блокировку шрифта. Таким образом, font-lock больше не использует jit-lock, поэтому он запускается во время команды пользователя, а не во время повторного отображения.
Стефан
источник
На самом деле, debug-on-errorкажется, работает нормально на процесс часовых.
Стефан
@tarsius - пожалуйста, опубликуйте ссылку на ваш выпуск
debbugs
Запрос функции tarsius - 19432, где он помечен как невоспроизводимый. Стефан Монье опубликовал обходной путь, который использует, --evalа не --debug-init . Кроме того, его обходной путь не помогает мне .emacs.d
уйти
1
@dcorking: нет, в ошибке # 19432 я не опубликовал «обходной путь», но неудачная попытка воспроизвести его ошибку. Почему бы вам не отправить рецепт, чтобы воспроизвести вашу проблему?
Стефан,