19.2.16 Параметры Edebug

Эти параметры влияют на поведение Edebug:

Параметр пользователя: edebug-setup-hook

Функции, вызываемые перед использованием Edebug. Каждый раз, когда этому параметру присваивается новое значение, Edebug вызывает эти функции один раз, а затем сбрасывает edebug-setup-hook в nil. Вы можете использовать это для загрузки спецификаций Edebug, связанных с используемым пакетом, но только когда вы также используете Edebug. См. Инструментирование для Edebug.

Параметр пользователя: edebug-all-defs

Если этот параметр не равен nil, обычное вычисление определяющих форм, таких как defun и defmacro, инструментирует их для Edebug. Это применяется к eval-defun, eval-region и eval-buffer.

Используйте команду M-x edebug-all-defs для переключения значения этого параметра. См. Инструментирование для Edebug.

Параметр пользователя: edebug-all-forms

Если этот параметр не равен nil, команды eval-defun, eval-region и eval-buffer инструментируют все формы, даже те, которые ничего не определяют. Это не применяется к загрузке или вычислениям в минибуфере.

Используйте команду M-x edebug-all-forms для переключения значения этого параметра. См. Инструментирование для Edebug.

Параметр пользователя: edebug-eval-macro-args

Если этот параметр не равен nil, все аргументы макросов будут инструментированы в сгенерированном коде. Для любого макроса объявление debug переопределяет этот параметр. Поэтому для указания исключений для макросов, у которых одни аргументы вычисляются, а другие нет, используйте объявление debug для задания спецификации формы Edebug.

Параметр пользователя: edebug-save-windows

Если этот параметр не равен nil, Edebug сохраняет и восстанавливает конфигурацию окон. Это требует некоторого времени, поэтому если ваша программа не заботится о том, что происходит с конфигурацией окон, лучше установить эту переменную в nil. Мы также рекомендуем установить это значение в nil, если значение по умолчанию приводит к тому, что Edebug перезаписывает позиции точки в буферах, которые задействованы в отлаживаемой программе, в результате сохранения и восстановления конфигурации окон; это может произойти, если ваша программа перемещает точку в одном или нескольких из этих буферов. Другой вариант настройки в этом случае — edebug-save-displayed-buffer-points, описанный ниже.

Если значением edebug-save-windows является список, сохраняются и восстанавливаются только перечисленные окна.

Вы можете использовать команду W в Edebug для интерактивного изменения этой переменной. См. Обновление отображения Edebug.

Параметр пользователя: edebug-save-displayed-buffer-points

Если этот параметр не равен nil, Edebug сохраняет и восстанавливает точку во всех отображаемых буферах.

Сохранение и восстановление точки в других буферах необходимо, если вы отлаживаете код, который изменяет точку буфера, отображаемого в невыбранном окне. Если затем Edebug или пользователь выбирает это окно, точка в этом буфере переместится к значению точки окна.

Сохранение и восстановление точки во всех буферах требует больших затрат, поскольку требует выбора каждого окна дважды, поэтому включайте эту возможность только при необходимости. См. Обновление отображения Edebug.

Параметр пользователя: edebug-initial-mode

Если эта переменная не равна nil, она задаёт начальный режим выполнения для Edebug при его первом активировании. Возможные значения: step, next, go, Go-nonstop, trace, Trace-fast, continue и Continue-fast.

Значение по умолчанию — step. Эту переменную можно установить интерактивно с помощью C-x C-a C-m (edebug-set-initial-mode). См. Режимы выполнения Edebug.

Параметр пользователя: edebug-trace

Если этот параметр не равен nil, трассировать каждый вход и выход из функции. Вывод трассировки отображается в буфере с именем *edebug-trace*, по одной строке на вход или выход из функции, с отступом по уровню рекурсии.

См. также edebug-tracing в Буфер трассировки.

Параметр пользователя: edebug-test-coverage

Если не равен nil, Edebug проверяет покрытие всех отлаживаемых выражений. См. Тестирование покрытия.

Параметр пользователя: edebug-continue-kbd-macro

Если не равен nil, продолжать определение или выполнение любого клавиатурного макроса, который выполняется вне Edebug. Используйте это с осторожностью, так как это не отлаживается. См. Режимы выполнения Edebug.

Параметр пользователя: edebug-print-length

Если не равен nil, значение по умолчанию для print-length при выводе результатов в Edebug. См. Переменные, влияющие на вывод.

Параметр пользователя: edebug-print-level

Если не равен nil, значение по умолчанию для print-level при выводе результатов в Edebug. См. Переменные, влияющие на вывод.

Параметр пользователя: edebug-print-circle

Если не равен nil, значение по умолчанию для print-circle при выводе результатов в Edebug. См. Переменные, влияющие на вывод.

Параметр пользователя: edebug-unwrap-results

Если не равен nil, Edebug пытается удалить все свои собственные инструментирующие конструкции при показе результатов выражений. Это актуально при отладке макросов, когда результаты выражений сами являются инструментированными выражениями. В качестве очень искусственного примера предположим, что пример функции fac был инструментирован, и рассмотрим макрос вида:

(defmacro test () "Пример Edebug."
  (if (symbol-function 'fac)
      …))

Если вы инструментируете макрос test и проходите по нему пошагово, то по умолчанию результат вызова symbol-function содержит множество форм edebug-after и edebug-before, что может затруднить просмотр фактического результата. Если edebug-unwrap-results не равен nil, Edebug пытается удалить эти формы из результата.

Параметр пользователя: edebug-on-error

Edebug привязывает debug-on-error к этому значению, если ранее debug-on-error был равен nil. См. Перехват ошибок.

Параметр пользователя: edebug-on-quit

Edebug привязывает debug-on-quit к этому значению, если ранее debug-on-quit был равен nil. См. Перехват ошибок.

Если вы изменяете значения edebug-on-error или edebug-on-quit во время активности Edebug, их значения не будут использоваться до следующего вызова Edebug новой командой.

Параметр пользователя: edebug-global-break-condition

Если не равен nil, выражение для проверки в каждой точке останова. Если результат не равен nil, то останавливаться. Ошибки игнорируются. См. Глобальное условие останова.

Параметр пользователя: edebug-sit-for-seconds

Количество секунд паузы при достижении точки останова и режиме выполнения trace или continue. См. Режимы выполнения Edebug.

Параметр пользователя: edebug-sit-on-break

Следует ли приостанавливаться на edebug-sit-for-seconds при достижении точки останова. Установите в nil, чтобы предотвратить паузу, или не равным nil, чтобы разрешить её.

Параметр пользователя: edebug-behavior-alist

По умолчанию этот список содержит одну запись с ключом edebug и список из трёх функций, которые являются реализациями по умолчанию функций, вставляемых в инструментированный код: edebug-enter, edebug-before и edebug-after. Чтобы изменить поведение Edebug глобально, измените запись по умолчанию.

Поведение Edebug также может быть изменено для каждого определения путём добавления записи в этот список с ключом по вашему выбору и тремя функциями. Затем установите свойство символа edebug-behavior инструментированного определения в ключ новой записи, и Edebug будет вызывать новые функции вместо своих собственных для этого определения.

Параметр пользователя: edebug-new-definition-function

Функция, запускаемая Edebug после того, как он обернёт тело определения или замыкания. После того как Edebug инициализирует свои собственные данные, эта функция вызывается с одним аргументом — символом, связанным с определением, который может быть фактическим определённым символом или сгенерированным Edebug. Эта функция может использоваться для установки свойства символа edebug-behavior для каждого определения, инструментированного Edebug.

Параметр пользователя: edebug-after-instrumentation-function

Чтобы проверить или изменить инструментирование Edebug перед его использованием, установите эту переменную в функцию, которая принимает один аргумент — инструментированную форму верхнего уровня, и возвращает либо ту же форму, либо заменяющую её, которую Edebug затем будет использовать как окончательный результат инструментирования.