Буфер списка вычислений
Вы можете использовать буфер списка вычислений, называемый *edebug*, для интерактивного вычисления выражений. Вы также можете настроить список вычислений выражений, которые будут вычисляться автоматически каждый раз, когда Edebug обновляет отображение.
- E
Переключиться на буфер списка вычислений *edebug* (
edebug-visit-eval-list).
В буфере *edebug* вы можете использовать команды режима взаимодействия с Lisp (см. Взаимодействие с Lisp в Руководстве пользователя GNU Emacs), а также следующие специальные команды:
- C-j
-
Вычислить выражение перед точкой, во внешнем контексте, и вставить значение в буфер (
edebug-eval-print-last-sexp). С префиксом аргумента ноль (C-u 0 C-j), не укорачивать длинные элементы (например, строки и списки). - C-x C-e
-
Вычислить выражение перед точкой, в контексте вне Edebug (
edebug-eval-last-sexp). - C-c C-u
-
Создать новый список вычислений из содержимого буфера (
edebug-update-eval-list). - C-c C-d
-
Удалить группу списка вычислений, в которой находится точка (
edebug-delete-eval-item). - C-c C-w
Вернуться обратно в буфер исходного кода в текущей точке остановки (
edebug-where).
Вы можете вычислять выражения в окне списка вычислений с помощью C-j или C-x C-e, так же, как и в *scratch*; но они будут вычисляться в контексте вне Edebug.
Выражения, которые вы вводите интерактивно (и их результаты), теряются, когда вы продолжаете выполнение; но вы можете настроить список вычислений, состоящий из выражений, которые будут вычисляться каждый раз, когда выполнение останавливается.
Для этого напишите одну или несколько групп списка вычислений в буфере списка вычислений. Группа списка вычислений состоит из одного или нескольких выражений Lisp. Группы разделены комментариями.
Команда C-c C-u (edebug-update-eval-list) перестраивает список вычислений, сканируя буфер и используя первое выражение каждой группы. (Идея в том, что второе выражение группы — это значение, которое было ранее вычислено и отображено.)
Каждый вход в Edebug повторно отображает список вычислений, вставляя каждое выражение в буфер, за которым следует его текущее значение. Также вставляются комментарии, чтобы каждое выражение стало собственной группой. Таким образом, если вы нажмёте C-c C-u снова, не изменяя текст буфера, список вычислений фактически останется неизменным.
Если при вычислении из списка вычислений произошла ошибка, сообщение об ошибке отображается в строке, как если бы это был результат. Следовательно, выражения, использующие переменные, которые в данный момент недействительны, не прерывают отладку.
Вот пример того, как выглядит окно списка вычислений после добавления в него нескольких выражений:
(current-buffer) #<buffer *scratch*> ;--------------------------------------------------------------- (selected-window) #<window 16 on *scratch*> ;--------------------------------------------------------------- (point) 196 ;--------------------------------------------------------------- bad-var "Symbol's value as variable is void: bad-var" ;--------------------------------------------------------------- (recursion-depth) 0 ;--------------------------------------------------------------- this-command eval-last-sexp ;---------------------------------------------------------------
Чтобы удалить группу, переместите точку в неё и введите C-c C-d, или просто удалите текст группы и обновите список вычислений с помощью C-c C-u. Чтобы добавить новое выражение в список вычислений, вставьте выражение в подходящее место, вставьте новую строку комментария, а затем введите C-c C-u. Вам не нужно вставлять тире в строку комментария — её содержимое не имеет значения.
После выбора *edebug*, вы можете вернуться в буфер исходного кода с помощью C-c C-w. Буфер *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/Eval-List.html