19.2.3 Режимы выполнения Edebug

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

Обычно вы указываете режим выполнения Edebug, вводя команду для продолжения работы программы в определенном режиме. Вот таблица этих команд; все, кроме S, возобновляют выполнение программы, по крайней мере, на определенное расстояние.

S

Stop: не выполнять больше программы, но ждать дальнейших команд Edebug (edebug-stop).

SPC

Step: остановиться в следующей обнаруженной точке останова (edebug-step-mode).

n

Next: остановиться в следующей обнаруженной точке останова после выражения (edebug-next-mode). См. также edebug-forward-sexp в Jumping.

t

Trace: делать паузу (обычно одна секунда) в каждой точке останова Edebug (edebug-trace-mode).

T

Rapid trace: обновлять дисплей в каждой точке останова, но фактически не делать паузу (edebug-Trace-fast-mode).

g

Go: работать до следующей точки останова (edebug-go-mode). См. Edebug Breakpoints.

c

Continue: делать паузу одну секунду в каждой точке останова, а затем продолжить (edebug-continue-mode).

C

Rapid continue: перемещать точку к каждой точке останова, но не делать паузу (edebug-Continue-fast-mode).

G

Go non-stop: игнорировать точки останова (edebug-Go-nonstop-mode). Вы все равно можете остановить программу, введя S или любую команду редактирования.

В общем, режимы выполнения, перечисленные ранее в списке, выполняют программу медленнее или останавливаются раньше, чем режимы, перечисленные позже в списке.

Когда вы входите в новый уровень Edebug, Edebug обычно останавливается в первой обнаруженной инструментированной функции. Если вы предпочитаете останавливаться только в точке останова или вообще не останавливаться (например, при сборе данных о покрытии), измените значение edebug-initial-mode с его значения по умолчанию step на go, или Go-nonstop, или одно из других его значений (см. Edebug Options). Вы можете сделать это легко с помощью C-x C-a C-m (edebug-set-initial-mode):

Команда: edebug-set-initial-mode

Эта команда, связанная с C-x C-a C-m, устанавливает edebug-initial-mode. Она запросит у вас ключ для указания режима. Вы должны ввести один из восьми перечисленных выше ключей, который устанавливает соответствующий режим.

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

Во время выполнения или трассировки вы можете прервать выполнение, введя любую команду Edebug. Edebug останавливает программу в следующей точке останова, а затем выполняет введенную вами команду. Например, ввод t во время выполнения переключает в режим трассировки в следующей точке останова. Вы можете использовать S, чтобы остановить выполнение, не делая ничего другого.

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

Макросы клавиатуры, содержащие команды из этого раздела, не работают полностью: выход из Edebug для возобновления программы теряет отслеживание макроса клавиатуры. Это нелегко исправить. Кроме того, определение или выполнение макроса клавиатуры вне Edebug не влияет на команды внутри Edebug. Это обычно является преимуществом. См. также опцию edebug-continue-kbd-macro в Edebug Options.

Пользовательская опция: edebug-sit-for-seconds

Эта опция указывает, сколько секунд ждать между шагами выполнения в режиме трассировки или режиме продолжения. По умолчанию — 1 секунда.