Spec-Zone.ru › Elisp

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

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

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

Эта функция входит в отладчик. Она переключает буферы на буфер с именем *Backtrace* (или *Backtrace*<2>, если это второй рекурсивный вход в отладчик и т.д.) и заполняет его информацией о стеке вызовов функций Lisp. Затем она входит в рекурсивный режим редактирования, отображая буфер трассировки стека в режиме отладчика.

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

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

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

lambda

Первый аргумент lambda означает, что debug был вызван из-за входа в функцию, когда debug-on-next-call было не-nil. Отладчик отображает строку «Debugger entered--entering a function:» в верхней части буфера.

debug

debug в качестве первого аргумента означает, что debug был вызван из-за входа в функцию, которая была настроена на отладку при входе. Отладчик отображает строку «Debugger entered--entering a function:», как и в случае lambda. Он также помечает кадр стека для этой функции, чтобы при выходе из неё вызывать отладчик.

t

Когда первый аргумент равен t, это указывает на вызов debug из-за вычисления формы вызова функции, когда debug-on-next-call не является nil. Отладчик отображает «Debugger entered--beginning evaluation of function call form:» в первой строке буфера.

exit

Когда первый аргумент равен exit, это указывает на выход из кадра стека, предварительно помеченного для вызова отладчика при выходе. Второй аргумент, переданный debug в этом случае, — это возвращаемое значение из кадра. Отладчик отображает «Debugger entered--returning value:» в верхней строке буфера, за которым следует возвращаемое значение.

error

Когда первый аргумент равен error, отладчик указывает, что он введён из-за того, что ошибка или quit была сигнализирована и не обработана, отображая «Debugger entered--Lisp error:», за которым следует сигнализированная ошибка и любые аргументы к 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.

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

Spec-Zone.ru

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