EdebugでLispプログラムをデバッグするには、最初にデバッグしたいLispコードをインストルメント(instrument:
計装)しなければなりません。これを行なうもっともシンプルな方法は、関数またはマクロの定義に移動してC-u
C-M-x(プレフィクス引数を指定したeval-defun
)を行います。コードをインストルメントする他の手段については、Edebugのためのインストルメントを参照してください。
一度関数をインストルメントすると、その関数にたいする任意の呼び出しによってEdebugがアクティブになります。Edebugがアクティブになると、どのEdebug実行モードを選択したかに依存して、その関数をステップ実行できるように実行がストップされるか、ディスプレイを更新してデバッグコマンドにたいするチェックの間、実行が継続されます。デフォルトの実行モードstepで、これは実行をストップします。Edebugの実行モードを参照してください。
Edebugでは通常は、デバッグしているLispコードをEmacsバッファーで閲覧します。これをソースコードバッファー(source code buffer)と呼び、バッファーは一時的に読み取り専用になります。
左フリンジの矢印は、その関数で実行されている行を示します。ポイントは最初はその関数の実行されている行にありますが、ポイントを移動するとこれは真ではなくなります。
以下はfac
の定義(以下を参照)をインストルメントして(fac
3)
を実行した場合に通常目にするものです。ポイントはif
の前の開きカッコにあります。
(defun fac (n) =>∗(if (< 0 n) (* n (fac (1- n))) 1))
関数内でEdebugが実行をストップできる位置のことを、ストップポイント(stop
points)と呼びます。ストップポイントはリストであるような部分式の前後、および変数参照の後でも発生します。以下は関数fac
内のストップポイントをピリオドで示したものです:
(defun fac (n) .(if .(< 0 n.). .(* n. .(fac .(1- n.).).). 1).)
Emacs
Lispモードのコマンドに加えて、ソースコードバッファーではEdebugのスペシャルコマンドが利用できます。たとえばEdebugコマンドSPCで次のストップポイントまで実行することができます。fac
にエントリーした後に一度SPCとタイプした場合は、以下のように表示されるでしょう:
(defun fac (n) =>(if ∗(< 0 n) (* n (fac (1- n))) 1))
式の後でEdebugが実行をストップしたときは、エコーエリアにその式の値が表示されます。
他にも頻繁に使用されるコマンドとして、ストップポイントにbreakpointをセットするb、breakpointに達するまで実行するg、Edebugをexitしてトップレベルのコマンドループにリターンするqがあります。また?とタイプするとすべてのEdebugコマンドがリストされます。