Буфер отладчика (в режиме отладчика) предоставляет специальные команды в дополнение к обычным командам Emacs и командам режима трассировки стека, описанным в предыдущем разделе. Самое важное применение команд отладчика — это пошаговое выполнение кода, чтобы вы могли увидеть, как протекает управление. Отладчик может выполнять пошаговое выполнение управляющих структур интерпретируемой функции, но не может делать это в байт-скомпилированной функции. Если вы хотите выполнить пошаговое выполнение байт-скомпилированной функции, замените ее на интерпретируемое определение той же функции. (Чтобы это сделать, перейдите к исходному коду функции и введите C-M-x в ее определении.) Вы не можете использовать Lisp-отладчик для пошагового выполнения примитивной функции.
Некоторые команды отладчика работают с текущей рамкой. Если рамка начинается со звездочки, это означает, что выход из этой рамки снова вызовет отладчик. Это полезно для проверки возвращаемого значения функции.
Ниже приведен список команд режима отладчика:
Выйти из отладчика и продолжить выполнение. Это возобновляет выполнение программы так, как если бы отладчик никогда не был запущен (за исключением любых побочных эффектов, которые вы вызвали, изменив значения переменных или структуры данных внутри отладчика).
Продолжить выполнение, но войти в отладчик в следующий раз, когда будет вызвана любая функция Lisp. Это позволяет вам выполнять пошаговое выполнение подвыражений выражения, видя, какие значения вычисляют подвыражения и что еще они делают.
Стек-рамка, созданная для вызова функции, который входит в отладчик таким образом, будет автоматически помечена, чтобы отладчик был вызван снова при выходе из рамки. Вы можете использовать команду u для отмены этой метки.
Пометить текущую рамку так, чтобы отладчик был вызван при выходе из рамки. Рамки, помеченные таким образом, отмечаются звездочками в буфере трассировки стека.
Не входить в отладчик при выходе из текущей рамки. Это отменяет команду b для этой рамки. Видимый эффект — удаление звездочки из строки в буфере трассировки стека.
Пометить текущую рамку, как b. Затем продолжить выполнение, как c, но временно отключить остановку при входе для всех функций, которые настроены на это с помощью debug-on-entry.
Прочитать выражение Lisp в минибуфере, вычислить его (с соответствующей лексической средой, если применимо) и напечатать значение в области эха. Отладчик изменяет некоторые важные переменные и текущий буфер в рамках своей работы; e временно восстанавливает их значения извне отладчика, чтобы вы могли их проверить и изменить. Это делает отладчик более прозрачным. В отличие от этого, M-: не делает ничего особенного в отладчике; он показывает вам значения переменных внутри отладчика. По умолчанию эта команда подавляет отладчик во время вычисления, чтобы ошибка в вычисленном выражении не добавляла новую ошибку поверх существующей. Установите опцию пользователя debug-allow-recursive-debug в значение, отличное от nil, чтобы переопределить это.
Подобно e, но также сохраняет результат вычисления в буфер *Debugger-record*.
Завершить отлаживаемую программу; вернуться к выполнению команд верхнего уровня Emacs.
Если отладчик был вызван из-за C-g, но вы действительно хотите выйти, а не отлаживать, используйте команду q.
Вернуть значение из отладчика. Значение вычисляется путем чтения выражения в минибуфере и его вычисления.
Команда r полезна, когда отладчик был вызван из-за выхода из фрейма вызова Lisp (как запрошено с помощью b или при входе в фрейм с помощью d); тогда значение, указанное в команде r, используется как значение этой рамки. Она также полезна, если вы вызываете debug и используете его возвращаемое значение. В противном случае r имеет тот же эффект, что и c, и указанное возвращаемое значение не имеет значения.
Вы не можете использовать r, когда отладчик был вызван из-за ошибки.
Показать список функций, которые вызовут отладчик при вызове. Это список функций, которые настроены на остановку при входе с помощью debug-on-entry.