Spec-Zone.ru › Elisp

Отладка ошибок перерисовки

Если в коде 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API