本セクションで説明するコマンドは、指定した箇所に到達するまで実行されます。i を除くすべてのコマンドは、停止位置を設定するために一時的なブレークポイントを作成し、その後 go モードに切り替わります(Edebug 実行モードを参照)。意図した停止位置に到達する前に他のブレークポイントに達した場合も、実行は停止します。ブレークポイントの詳細については、Edebug ブレークポイントを参照してください。
非ローカルな終了が発生した場合、プログラムが停止すると想定していた一時的なブレークポイントをバイパスしてしまう可能性があるため、これらのコマンドが期待通りに動作しないことがあります。
点 (edebug-goto-here) 付近の停止点へ進む。
1つの式(edebug-forward-sexp)に対してプログラムを実行してください。
包含する sexp (edebug-step-out) の末尾までプログラムを実行します。
フォームの後点 (edebug-step-in) で呼び出された関数またはマクロに入ります。
hコマンドは、一時的なブレークポイントを使用して、現在のポイント以降の停止地点まで進みます。
f コマンドは、プログラムを1つの式分だけ前方に実行します。より正確には、forward-sexp が到達する位置に一時的なブレークポイントを設定し、その後 go
モードで実行することで、プログラムがブレークポイントで停止するようにします。
接頭辞引数 n を指定すると、一時ブレークポイントはポイントから n 個の式先に配置されます。包含リストが n 個以上の要素が残る前に終了する場合、停止位置は包含式の後になります。
forward-sexp
で見つかった位置が、プログラムが実際に到達する場所であるかを確認する必要があります。例えば cond
では、必ずしもそうとは限りません。
柔軟性を高めるため、f コマンドは停止位置ではなく、現在位置から forward-sexp を実行します。現在の停止位置から
一つの式を実行したい場合は、まず w (edebug-where) と入力して位置をそこに移動させ、その後 f と入力してください。
o コマンドは、式の続きから実行を再開します。これは、point を含む sexp の末尾に一時的なブレークポイントを設定します。もしその sexp 自体が関数定義である場合、o は定義内の最後の sexp の直前まで実行を再開します。現在その位置にいる場合は、関数から復帰して停止します。言い換えれば、このコマンドは、その関数の最後の sexp より後の位置にいない限り、現在実行中の関数を抜けることはありません。
通常、h、f、o コマンドは「Break」と表示し、edebug-sit-for-seconds
で一時停止した後、直前に評価されたフォームの結果を表示します。edebug-sit-on-break
を nil に設定することで、この一時停止を回避できます。Edebug Options を参照してください。
i コマンドは、ポイント以降のリスト形式で呼び出された関数やマクロにステップインし、最初の停止点で止まります。なお、この形式が必ずしも評価直前のものである必要はありません。ただし、その形式が評価直前の関数呼び出しである場合は、引数が評価される前にこのコマンドを使用することを忘れないでください。そうしないと、手遅れになってしまいます。
i コマンドは、ステップ実行対象となる関数やマクロに、まだインストルメンテーションが施されていない場合に、それを適用します。これは便利ですが、明示的に解除する措置を講じない限り、その関数やマクロにはインストルメンテーションが適用されたままになる点に注意してください。