Режим отладчика является производным от режима обратной трассировки, который также используется для показа обратных трассировок в Edebug и ERT. (см. Edebug и руководство ERT в ERT: Регрессионное тестирование на Emacs Lisp.)
Буфер обратной трассировки показывает вам выполняемые функции и значения их аргументов. Когда буфер обратной трассировки создаётся, он показывает каждый стековый фрейм на одной, возможно очень длинной, строке. (Стековый фрейм — это место, где интерпретатор Lisp сохраняет информацию о конкретном вызове функции.) Самая недавно вызванная функция будет находится наверху.
В обратной трассировке вы можете указать стековый фрейм, переместив точку на строку, описывающую этот фрейм. Фрейм, на строке которого находится точка, считается текущим фреймом.
Если имя функции подчёркнуто, это означает, что Emacs знает, где находится её исходный код. Вы можете щёлкнуть мышью по этому имени или перейти к нему и нажать RET, чтобы перейти к исходному коду. Вы также можете нажать RET, когда точка находится на любом имени функции или переменной, которое не подчёркнуто, чтобы увидеть справочную информацию об этом символе в буфере справки, если таковая существует. Команда xref-find-definitions, привязанная к M-., также может использоваться для любого идентификатора в обратной трассировке (см. Поиск идентификаторов в Руководство по GNU Emacs).
В обратных трассировках хвосты длинных списков и концы длинных строк, векторов или структур, а также глубоко вложенные объекты будут печататься как подчёркнутые “...”. Вы можете щёлкнуть мышью по “...” или нажать RET, когда точка находится на них, чтобы показать часть объекта, которая была скрыта. Чтобы управлять степенью сокращения, настройте backtrace-line-length.
Вот список команд для навигации и просмотра обратных трассировок:
Переключить отображение локальных переменных текущего стекового фрейма.
Переместиться к началу фрейма или к началу предыдущего фрейма.
Переместиться к началу следующего фрейма.
Добавить разрывы строк и отступы в Lisp-форму верхнего уровня в точке, чтобы сделать её более читаемой.
Свернуть Lisp-форму верхнего уровня в точке обратно в одну строку.
Переключить print-circle для фрейма в точке.
Переключить print-gensym для фрейма в точке.
Развернуть все формы, сокращённые с помощью “...”, во фрейме в точке.