edebugでLispプログラムをデバッグするには、
デバッグしたいLispコードをまず処置(instrument)しておく必要があります。
これを行う簡単な方法は、関数やマクロの定義にポイントを移動してから、
C-u C-M-x(前置引数を指定したeval-defun
)を実行します。
コードを処置する別の方法については、See Instrumenting。
関数をいったん処置しておけば、当該関数を呼び出すとedebugを活性にします。 edebugが活性になると実行を停止し、 読者が選択したedebugの実行モードに応じて、 関数をステップ実行したりデバッグコマンドを検査しながら 表示を更新しつつ実行を継続します。 デフォルトの実行モードはステップ実行であり、 いったん実行を停止します。 See Edebug Execution Modes。
edebugでは、デバッグ中のLispコードのソースを 表示したEmacsバッファを読者は見ます。 このバッファをソースコードバッファと呼びます。 このバッファは一時的に読み出し専用です。
左端の矢印は、関数の実行中の行を表します。 ポイントの初期位置は関数の実行中の行にありますが、 読者自身がポイントを移動すると変わります。
(以下の)fac
の定義を処置してから(fac 3)
を実行したとすると、
つぎのようになります。
ポイントはif
のまえの開き括弧にあります。
(defun fac (n) =>-!-(if (< 0 n) (* n (fac (1- n))) 1))
edebugが関数内で実行を停止できる箇所を停止位置(stop point)と呼びます。
これらは、リストである各部分式の前後と各変数参照のうしろにあります。
関数fac
の中にある停止位置をピリオドで示します。
(defun fac (n) .(if .(< 0 n.). .(* n. .(fac (1- n.).).). 1).)
ソースコードバッファでは、Emacsのlispモードのコマンドに加えて
edebugの特別なコマンドを使えます。
たとえば、つぎの停止位置まで実行するには
edebugコマンド<SPC>を打ちます。
fac
に入ったあとで<SPC>を1回打つと、
つぎのような表示になります。
(defun fac (n) =>(if -!-(< 0 n) (* n (fac (1- n))) 1))
式のうしろでedebugが実行を停止すると、 式の値をエコー領域に値を表示します。
多用される他のコマンドには、 停止位置にブレークポイントを設定するb、 ブレークポイントに達するまで実行するg、 edebugを終了してトップレベルのコマンドループへ戻るqがあります。 edebugのコマンド一覧を表示するには?を打ちます。