Как Emacs обрабатывает ошибки
При возникновении ошибки, signal ищет активный обработчик ошибки. Обработчик — это последовательность выражений Lisp, предназначенных для выполнения в случае возникновения ошибки в части программы Lisp. Если для ошибки есть соответствующий обработчик, он выполняется, и управление возвращается после обработчика. Обработчик выполняется в среде condition-case, которая его установила; все вызываемые функции в этой condition-case уже завершены, и обработчик не может вернуться к ним.
Если для ошибки нет подходящего обработчика, он завершает текущую команду и возвращает управление циклу команд редактора. (Цикл команд имеет неявный обработчик для всех типов ошибок.) Обработчик цикла команд использует символ ошибки и связанные данные для вывода сообщения об ошибке. Вы можете использовать переменную command-error-function для управления этим процессом:
- Переменная: command-error-function
Эта переменная, если она не
nil, задает функцию для обработки ошибок, которые возвращают управление циклу команд Emacs. Функция должна принимать три аргумента: data, список того же формата, что и тот, к которомуcondition-caseпривязывалась к своей переменной; context, строка, описывающая ситуацию, в которой произошла ошибка, или (чаще)nil; и caller, функция Lisp, которая вызвала примитив, который сообщил об ошибке.
Ошибка, у которой нет явного обработчика, может вызвать отладчик Lisp. Отладчик активируется, если переменная debug-on-error (см. Отладка ошибок) не nil. В отличие от обработчиков ошибок, отладчик работает в среде ошибки, так что вы можете проверить значения переменных точно так, как они были в момент ошибки.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Processing-of-Errors.html