Вызов отладчика
Здесь подробно описывается функция 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