Использование Edebug
Чтобы отлаживать программу на 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.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Using-Edebug.html