Spec-Zone.ru › Elisp

Вызов отладчика

Здесь мы подробно описываем функцию debug, используемую для вызова отладчика.

Команда: debug &rest debugger-args

Эта функция запускает отладчик. В интерактивных сеансах она переключается на буфер с именем *Backtrace* (или *Backtrace*<2>, если это второй рекурсивный вход в отладчик, и т. д.) и заполняет его информацией о стеке вызовов функций Lisp. Затем она запускает рекурсивное редактирование, отображая буфер трассировки стека в режиме Debugger. В пакетном режиме (в более общем случае, когда noninteractive не равно nil, см. Пакетный режим) эта функция выводит трассировку стека Lisp в стандартный поток ошибок. Привязка backtrace-on-error-noninteractive к nil подавляет вывод трассировки стека в пакетном режиме; см. ниже.

Команды режима Debugger c, d, j и r завершают рекурсивное редактирование; затем debug переключается обратно на предыдущий буфер и возвращается к тому, что вызвало debug. Это единственный способ, которым функция debug может вернуться к своему вызывающему коду.

Аргументы debugger-args нужны для того, чтобы debug выводила остальные аргументы в верхней части буфера *Backtrace*, чтобы пользователь мог их видеть. За исключением описанных ниже случаев, это единственный способ использования этих аргументов.

Однако некоторые значения первого аргумента для debug имеют особое значение. (Обычно эти значения используются только внутренними механизмами Emacs, а не программистами, вызывающими debug.) Ниже приведена таблица этих специальных значений:

lambda

Первый аргумент lambda означает, что debug была вызвана при входе в функцию, когда debug-on-next-call не равнялась nil. В верхней части буфера отладчик выводит строку «Вход в отладчик — вход в функцию:».

debug

Значение debug в качестве первого аргумента означает, что debug была вызвана при входе в функцию, для которой была включена отладка при входе. Отладчик выводит строку «Вход в отладчик — вход в функцию:», как и в случае lambda. Кроме того, он помечает стековый кадр этой функции, чтобы вызвать отладчик при выходе из неё.

t

Если первый аргумент — t, это означает, что debug была вызвана при вычислении формы вызова функции, когда debug-on-next-call не равнялась nil. В первой строке буфера отладчик выводит «Вход в отладчик — начало вычисления формы вызова функции:».

exit

Если первый аргумент — exit, это означает выход из стекового кадра, ранее помеченного для вызова отладчика при выходе. Второй аргумент, переданный debug в этом случае, — это значение, возвращаемое из кадра. В первой строке буфера отладчик выводит «Вход в отладчик — возвращаемое значение:», а следом — возвращаемое значение.

error

Если первый аргумент — error, отладчик сообщает, что был запущен из-за того, что возникла ошибка или было вызвано quit, которые не были обработаны. Для этого он выводит «Вход в отладчик — ошибка Lisp:», а следом — возникшую ошибку и все аргументы signal. Например:

(let ((debug-on-error t))
  (/ 1 0))
------ Buffer: *Backtrace* ------
Debugger entered--Lisp error: (arith-error)
  /(1 0)
...
------ Buffer: *Backtrace* ------

Если возникла ошибка, вероятно, переменная debug-on-error не равна nil. Если было вызвано quit, вероятно, переменная debug-on-quit не равна nil.

nil

Используйте nil в качестве первого аргумента debugger-args, если хотите явно войти в отладчик. Остальные аргументы debugger-args выводятся в первой строке буфера. Эта возможность позволяет отображать сообщения, например напоминания об условиях вызова debug.

Переменная: backtrace-on-error-noninteractive

Если эта переменная не равна nil (значение по умолчанию), вход в отладчик в пакетном режиме выводит трассировку стека вызовов функций Lisp. Привязка переменной к значению nil подавляет трассировку стека и выводит только сообщение об ошибке.

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/Invoking-the-Debugger.html

Spec-Zone.ru

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