Чтобы отладить программу на Lisp с помощью Edebug, вы должны сначала инструментировать
код Lisp, который вы хотите отладить. Простой способ сделать это — сначала переместить
курсор в определение функции или макроса, а затем выполнить C-u C-M-x (eval-defun с аргументом префикса). См.
Инструментарий для Edebug, для альтернативных способов инструментации кода.
После того как функция инструментализирована, любой вызов этой функции активирует Edebug. В зависимости от выбранного вами режима выполнения Edebug, активация Edebug может остановить выполнение и позволить вам пошагово пройти по функции, или она может обновить отображение и продолжить выполнение, проверяя команды отладки. Режим выполнения по умолчанию — пошаговый, который останавливает выполнение. См. Режимы выполнения Edebug.
Внутри Edebug вы обычно просматриваете буфер Emacs, показывающий исходный код отлаживаемой вами программы на Lisp. Это называется буфером исходного кода, и он временно доступен только для чтения.
Стрелка в левой кайме указывает на строку, в которой выполняется функция. Курсор показывает, где внутри строки выполняется функция, но это перестает быть верным, если вы сами перемещаете курсор.
Если вы инструментализируете определение fac (показано ниже) и затем
выполняете (fac 3), вот что вы обычно увидите. Курсор находится
перед открывающей скобкой перед if.
(defun fac (n)
=>∗(if (< 0 n)
(* n (fac (1- n)))
1))
Места внутри функции, где Edebug может остановить выполнение, называются
точками остановки. Они возникают как перед, так и после каждого
подвыражения, которое является списком, а также после каждой ссылки на переменную.
Здесь мы используем точки, чтобы показать точки остановки в функции
fac:
(defun fac (n)
.(if .(< 0 n.).
.(* n. .(fac .(1- n.).).).
1).)
Специальные команды Edebug доступны в буфере исходного кода в дополнение к
командам режима Emacs Lisp. Например, вы можете ввести команду Edebug SPC,
чтобы выполнить до следующей точки остановки. Если вы введете SPC один
раз после входа в fac, вот отображение, которое вы увидите:
(defun fac (n)
=>(if ∗(< 0 n)
(* n (fac (1- n)))
1))
Когда Edebug останавливает выполнение после выражения, он отображает значение этого выражения в области эхо.
Другие часто используемые команды — b для установки точки остановки, g для выполнения до достижения точки остановки и q для выхода из Edebug и возврата к главному циклу команд. Нажмите ?, чтобы отобразить список всех команд Edebug.