Spec-Zone.ru › Elisp

Ввод в отладчик при ошибке

Самое важное время для входа в отладчик — это момент возникновения ошибки Lisp. Это позволяет вам исследовать непосредственные причины ошибки.

Однако вход в отладчик не является обычным следствием ошибки. Многие команды сигнализируют об ошибках Lisp при некорректном вызове, и во время обычного редактирования ввод в отладчик при каждом таком случае был бы очень неудобен. Поэтому, если вы хотите, чтобы ошибки входили в отладчик, установите переменную debug-on-error в значение отличное от nil. (Команда toggle-debug-on-error предоставляет простой способ сделать это.)

Параметр пользователя: debug-on-error

Эта переменная определяет, вызывается ли отладчик, когда сигнализируется ошибка и не обрабатывается. Если debug-on-error имеет значение t, все виды ошибок вызывают отладчик, за исключением тех, которые перечислены в debug-ignored-errors (см. ниже). Если же это nil, то отладчик не вызывается ни в одном случае.

Значение также может быть списком условий ошибок (см. Сигнализация об ошибках). Тогда отладчик вызывается только для условий ошибок в этом списке (за исключением тех, которые также перечислены в debug-ignored-errors). Например, если вы установите debug-on-error в список (void-variable), отладчик будет вызываться только для ошибок, связанных с переменной, у которой нет значения.

Обратите внимание, что eval-expression-debug-on-error переопределяет эту переменную в некоторых случаях; см. ниже.

Когда эта переменная имеет значение отличное от nil, Emacs не создаёт обработчик ошибок вокруг функций фильтрации процессов и стражей. Поэтому ошибки в этих функциях также вызывают отладчик. См. Процессы.

Параметр пользователя: debug-ignored-errors

Эта переменная указывает ошибки, которые не должны входить в отладчик, независимо от значения debug-on-error. Ее значение — список символов условий ошибок и/или регулярных выражений. Если ошибка имеет любой из этих символов условия, или если сообщение об ошибке соответствует любому из регулярных выражений, то эта ошибка не входит в отладчик.

Нормальное значение этой переменной включает user-error, а также несколько ошибок, которые часто возникают во время редактирования, но редко являются результатом ошибок в программах Lisp. Однако «редко» не означает «никогда»; если ваша программа завершается ошибкой, соответствующей этому списку, вы можете попробовать изменить этот список для отладки ошибки. Обычно самый простой способ — установить debug-ignored-errors в значение nil.

Параметр пользователя: eval-expression-debug-on-error

Если эта переменная имеет значение отличное от nil (по умолчанию), выполнение команды eval-expression временно связывает debug-on-error со значением t. См. Оценивание выражений Emacs Lisp в Руководстве по GNU Emacs.

Если eval-expression-debug-on-error имеет значение nil, то значение debug-on-error не меняется во время eval-expression.

Параметр пользователя: debug-on-signal

Обычно ошибки, перехваченные condition-case, никогда не вызывают отладчик. condition-case получает возможность обработать ошибку, прежде чем отладчик получит шанс.

Если вы измените debug-on-signal на значение отличное от nil, отладчик получает первый шанс на каждую ошибку, независимо от наличия condition-case. (Для вызова отладчика ошибка должна по-прежнему соответствовать критериям, указанным в debug-on-error и debug-ignored-errors.)

Например, установка этой переменной полезна для получения трассировки стека из кода, вычисленного опцией --eval emacsclient. Если код Lisp, вычисленный emacsclient, сигнализирует об ошибке, в то время как эта переменная имеет значение отличное от nil, трассировка стека появится в работающем Emacs.

Предупреждение: Установка этой переменной в значение отличное от nil может иметь неприятные последствия. Различные части Emacs перехватывают ошибки в обычном режиме работы, и вы можете даже не заметить, что там возникают ошибки. Если вам нужно отладить код, заключенный в condition-case, рассмотрите использование condition-case-unless-debug (см. Обработка ошибок).

Параметр пользователя: debug-on-event

Если вы установите debug-on-event в специальное событие (см. Специальные события), Emacs попытается войти в отладчик, как только получит это событие, минуя special-event-map. В настоящее время поддерживаются только значения, соответствующие сигналам SIGUSR1 и SIGUSR2 (это значение по умолчанию). Это может быть полезно, когда inhibit-quit установлено, и Emacs не реагирует иначе.

Переменная: debug-on-message

Если вы установите debug-on-message в регулярное выражение, Emacs войдёт в отладчик, если в области эха отобразится совпадающее сообщение. Например, это может быть полезно при поиске причины конкретного сообщения.

Для отладки ошибки, возникающей во время загрузки файла инициализации, используйте опцию «--debug-init». Это привязывает debug-on-error к значению t при загрузке файла инициализации и обходит condition-case, который обычно перехватывает ошибки в файле инициализации.

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/Error-Debugging.html

Spec-Zone.ru

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