次: , 前: Edebug, 上: Edebug


17.2.1 edebugの使い方

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のコマンド一覧を表示するには?を打ちます。