Отладка ошибок перерисовки
Если в коде Lisp, вызванном перерисовкой, происходит ошибка, обычные механизмы отладки Emacs по техническим причинам использовать нельзя. В этом подразделе описано, как получить трассировку стека для такой ошибки, что должно помочь в её отладке.
Эти инструкции относятся к формам Lisp, используемым, например, в конструкциях строки режима :eval (см. Структура данных строки режима), а также во всех хуках, вызываемых при перерисовке, например:
-
fontification-functions(см. Автоматическое назначение лиц). -
window-scroll-functions(см. Хуки прокрутки и изменения окон).
Обратите внимание: если ошибка произошла в функции хука, вызванной при перерисовке, обработчик ошибок мог удалить эту функцию из хука. Поэтому вам потребуется каким-либо образом повторно инициализировать этот хук, возможно, с помощью add-hook, чтобы воспроизвести ошибку.
Чтобы в таких обстоятельствах получить трассировку стека, установите переменную backtrace-on-redisplay-error в значение не-nil. При возникновении ошибки Emacs сохранит трассировку стека в буфере *Redisplay-trace*, но не будет автоматически показывать его в окне. Это сделано для того, чтобы не нарушать без необходимости перерисовку, которую вы отлаживаете. Поэтому вам нужно будет самостоятельно показать буфер с помощью такой команды, как switch-to-buffer-other-frame C-x 5 b.
- Переменная: backtrace-on-redisplay-error
Установите эту переменную в значение не-
nil, чтобы включить создание трассировки стека при возникновении ошибки в любом коде Lisp, вызванном при перерисовке.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Debugging-Redisplay.html