Spec-Zone.ru › Elisp

Буфер списка вычислений

Для интерактивного вычисления выражений можно использовать буфер списка вычислений, называемый *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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API