Spec-Zone.ru › Elisp

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

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

Spec-Zone.ru

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