Буфер списка вычислений
Для интерактивного вычисления выражений можно использовать буфер списка вычислений, называемый *edebug*. Также можно настроить список вычислений из выражений, которые будут вычисляться автоматически при каждом обновлении отображения Edebug.
- E
Переключиться в буфер списка вычислений *edebug* (
edebug-visit-eval-list).
В буфере *edebug* можно использовать команды режима взаимодействия с Lisp (см. раздел Взаимодействие с Lisp в Руководстве GNU Emacs), а также следующие специальные команды:
- C-j
-
Вычислить выражение перед точкой в контексте вне Edebug и вставить значение в буфер (
edebug-eval-print-last-sexp). При нулевом префиксном аргументе (C-u 0 C-j) не сокращать длинные элементы (например, строки и списки) из-заedebug-print-lengthиedebug-print-level(см. раздел Вывод в Edebug). - 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). Буфер *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/Eval-List.html