Когда вызывается отладчик, он отображает ранее выбранный буфер в одном окне и буфер с именем *Backtrace* в другом окне. Буфер трассировки стека содержит одну строку для каждого уровня выполнения функции Lisp, который в данный момент запущен. В начале этого буфера находится сообщение, описывающее причину вызова отладчика (например, сообщение об ошибке и связанные данные, если он был вызван из-за ошибки).
Буфер трассировки стека является только для чтения и использует специальный
основной режим, Debugger mode, в котором буквы определены как команды
отладчика. Доступны обычные команды редактирования Emacs; таким образом, вы
можете переключать окна, чтобы изучить буфер, который редактировался на
момент ошибки, переключать буферы, просматривать файлы или выполнять любые
другие виды редактирования. Однако отладчик является рекурсивным уровнем
редактирования (см. Рекурсивное редактирование),
и разумно вернуться к буферу трассировки стека и выйти из отладчика
(с помощью команды q) после завершения работы с ним.
Выход из отладчика выводит из рекурсивного редактирования и скрывает
буфер трассировки стека. (Вы можете настроить, что делает команда q
с буфером трассировки стека, установив переменную debugger-bury-or-kill.
Например, установите ее в kill, если вы предпочитаете
удалять буфер, а не скрывать его. Обратитесь к документации переменной для
больше возможностей.)
Когда отладчик был вызван, переменная debug-on-error
временно устанавливается в соответствии с eval-expression-debug-on-error.
Если последняя переменная не равна nil, debug-on-error
временно будет установлено в t. Однако дальнейшие ошибки,
происходящие во время отладки, по умолчанию не вызовут другого отладчика,
потому что inhibit-debugger также будет привязана к не-nil.
Сам отладчик должен быть запущен с компиляцией байт-кода, поскольку он делает допущения о состоянии интерпретатора Lisp. Эти допущения неверны, если отладчик работает в интерпретируемом режиме.