Использование Edebug
Для отладки программы Lisp с помощью Edebug необходимо предварительно подготовить код Lisp, который вы хотите отладить. Простой способ сделать это — переместить точку в определение функции или макроса и затем выполнить C-u C-M-x (eval-defun с префиксом). Смотрите Подготовка для альтернативных способов подготовки кода.
После подготовки функции любой вызов функции активирует 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.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Using-Edebug.html