Ввод в отладчик при ошибке
Самое важное время для входа в отладчик — это момент возникновения ошибки 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