Команды отладчика
Буфер отладчика (в режиме отладчика) предоставляет специальные команды в дополнение к обычным командам Emacs и командам режима трассировки стека, описанным в предыдущем разделе. Команды отладчика в первую очередь используются для пошагового выполнения кода, чтобы вы могли видеть, как передаётся управление. Отладчик может пошагово выполнять управляющие конструкции интерпретируемой функции, но не может делать этого для функции, скомпилированной в байт-код. Если вы хотите пошагово выполнить функцию, скомпилированную в байт-код, замените её интерпретируемым определением той же функции. (Для этого откройте исходный код функции и нажмите C-M-x в её определении.) С помощью отладчика Lisp нельзя пошагово выполнять примитивную функцию.
Некоторые команды отладчика работают с текущим кадром стека. Если строка кадра начинается со звёздочки, это означает, что при выходе из этого кадра отладчик будет вызван снова. Это полезно для просмотра возвращаемого функцией значения.
Список команд режима отладчика:
- c
-
Выйти из отладчика и продолжить выполнение. Выполнение программы возобновится так, как если бы отладчик не запускался (за исключением побочных эффектов, вызванных изменением значений переменных или структур данных во время работы в отладчике).
- d
-
Продолжить выполнение, но войти в отладчик при следующем вызове любой функции Lisp. Это позволяет пошагово выполнять подвыражения выражения, наблюдая, какие значения они вычисляют и какие ещё действия выполняют.
Кадр стека, созданный для вызова функции, при котором отладчик запускается таким образом, будет автоматически помечен, чтобы отладчик вызвался снова при выходе из кадра. С помощью команды u можно отменить эту пометку.
- b
-
Пометить текущий кадр, чтобы отладчик запустился при выходе из него. Такие кадры отмечаются звёздочками в буфере трассировки стека.
- u
-
Не запускать отладчик при выходе из текущего кадра. Эта команда отменяет действие команды b для данного кадра. В буфере трассировки стека звёздочка в соответствующей строке исчезнет.
- j
-
Пометить текущий кадр, как при выполнении команды b. Затем продолжить выполнение, как при выполнении команды c, но временно отключить остановку при входе для всех функций, для которых она настроена с помощью
debug-on-entry. - e
-
Прочитать выражение Lisp в минибуфере, вычислить его (с соответствующим лексическим окружением, если применимо) и вывести значение в области эха. В ходе работы отладчик изменяет некоторые важные переменные и текущий буфер; команда e временно восстанавливает их значения, существовавшие до входа в отладчик, чтобы вы могли проверить и изменить их. Благодаря этому отладчик работает более прозрачно. В отличие от неё, команда M-: в отладчике не делает ничего особенного: она показывает значения переменных внутри отладчика. По умолчанию эта команда отключает отладчик на время вычисления, поэтому ошибка в вычисляемом выражении не добавит новую ошибку поверх уже существующей. Чтобы изменить это поведение, задайте пользовательскому параметру
debug-allow-recursive-debugзначение, отличное отnil. - R
-
То же, что и e, но результат вычисления также сохраняется в буфере *Debugger-record*.
- q
-
Завершить отлаживаемую программу и вернуться к выполнению команд Emacs верхнего уровня.
Если отладчик был запущен из-за нажатия C-g, но вы действительно хотите выйти, а не отлаживать программу, используйте команду q.
- r
-
Вернуть значение из отладчика. Значение вычисляется путём чтения выражения в минибуфере и его вычисления.
Команда r полезна, когда отладчик был вызван при выходе из кадра вызова Lisp (по запросу команды b или после входа в кадр с помощью команды d); в этом случае значение, заданное командой r, используется как значение этого кадра. Она также полезна, если вызвать
debugи использовать возвращаемое им значение. В противном случае команда r действует так же, как c, а заданное возвращаемое значение не имеет значения.Команду r нельзя использовать, если отладчик был запущен из-за ошибки.
- l
-
Показать список функций, вызов которых запускает отладчик. В этот список входят функции, для которых настроена остановка при входе с помощью
debug-on-entry.
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/Debugger-Commands.html