19.2.4 Перемещение (Jumping)

Команды, описанные в этом разделе, выполняются до тех пор, пока не будет достигнуто указанное место. Все, кроме i, устанавливают временную точку останова, чтобы определить место остановки, а затем переключаются в режим выполнения. Любая другая точка останова, достигнутая до предполагаемой точки остановки, также остановит выполнение. Подробности о точках останова см. в Edebug Breakpoints.

Эти команды могут работать не так, как ожидается, в случае нелокального выхода, поскольку он может обойти временную точку останова, в которой вы ожидали остановки программы.

h

Продолжить до точки остановки около текущего положения point (edebug-goto-here).

f

Выполнить программу для одной выражения (edebug-forward-sexp).

o

Выполнить программу до конца содержащего sexp (edebug-step-out).

i

Войти в функцию или макрос, вызываемый формой после point (edebug-step-in).

Команда h продолжает выполнение до точки остановки в текущем или последующем положении point, используя временную точку останова.

Команда f выполняет программу вперед для одного выражения. Точнее, она устанавливает временную точку останова в позиции, до которой достиг бы forward-sexp, а затем выполняет в режиме выполнения, чтобы программа останавливалась в точках останова.

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

Вы должны убедиться, что позиция, которую находит forward-sexp, является местом, до которого программа действительно дойдет. Например, в cond это может не быть так.

Для гибкости команда f выполняет forward-sexp, начиная с point, а не с точки остановки. Если вы хотите выполнить одно выражение с текущей точки остановки, сначала введите w (edebug-where), чтобы переместить point туда, а затем введите f.

Команда o продолжает выполнение из выражения. Она устанавливает временную точку останова в конце sexp, содержащего point. Если содержащий sexp сам является определением функции, o продолжает выполнение до самого последнего sexp в определении. Если вы находитесь там, то функция возвращается, а затем останавливается. Другими словами, эта команда не выходит из выполняющейся функции, если вы не находитесь после последнего sexp.

Обычно команды h, f и o отображают «Break» и приостанавливаются на edebug-sit-for-seconds перед отображением результата только что вычисленной формы. Вы можете избежать этой паузы, установив edebug-sit-on-break в nil. См. Edebug Options.

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

Команда i инструментирует функцию или макрос, в который она должна войти, если он еще не инструментирован. Это удобно, но помните, что функция или макрос остается инструментированным, если вы явно не организуете его деинструментирование.