次: Edebug Execution Modes, 前: Using Edebug, 上: Edebug
Lispコードのデバッグにedebugを使うためには、 コードをまず処置する必要があります。 コードを処置すると、適当な箇所でedebugを起動する追加のコードを挿入します。
いったんedebugをロードすると、
コマンドC-M-x(eval-defun)は再定義されます。
定義内で前置引数を指定して起動すると
定義を評価するまえに処置するようになります。
(ソースコード自体は変更しない。)
変数edebug-all-defsがnil以外であると、
前置引数の意味を逆にします。
つまり、前置引数を指定しない限り、
C-M-xは関数定義を処置します。
変数edebug-all-defsのデフォルト値はnilです。
コマンドM-x edebug-all-defsは変数edebug-all-defsの値を
トグルします。
edebug-all-defsがnil以外であると、
コマンドeval-region、eval-current-buffer、eval-bufferも
それらが評価する定義を処置します。
同様に、edebug-all-formsは、
定義以外のフォームであってもeval-regionが
任意のフォームを処置するかどうか制御します。
これは、ミニバッファでのロードや評価には適用されません。
コマンドM-x edebug-all-formsはこのオプションをトグルします。
別のコマンドM-x edebug-eval-top-level-formは、
edebug-all-defsとedebug-all-formsの値に関わらず
任意のトップレベルのフォームを処置するために使えます。
edebugが動作中は、
コマンドI(edebug-instrument-callee)で、
ポイントのうしろのフォームから呼ばれる関数やマクロの定義を
処置済みでなければ処置できます。
これは、edebugが当該関数のソースを探せる場合にのみ可能です。
edebugをロード後には、
eval-regionは、処置していないものも含めて、
評価した各定義の位置を記録しています。
関数を処置後に呼び出してステップ実行する
コマンドi(see Jumping)も参照してください。
edebugは、標準のスペシャルフォームすべて、
式を引数とするinteractiveフォーム、
無名ラムダ式、他の定義フォームをどのように処置するかわかっています。
edebugは、マクロ呼び出しを引数に持つユーザー定義マクロをどのように
処置すべきかわかりませんから、読者がそれを指示する必要があります。
詳しくは、See Instrumenting Macro Calls。
edebugは、あるセッションで初めてコードを処置する場合、
フックedebug-setup-hookを実行してから
それにnilを設定します。
これを利用すると、読者が使用するパッケージに対応した
edebug用仕様(see Instrumenting Macro Calls)を
edebugを使用する場合にのみロードするようにできます。
定義から処置を取り除くには、
処置しないような方法でその定義を単に再評価するだけです。
けっして処置せずにフォームを評価する方法は2つあります。
ファイルをloadするか、
ミニバッファでeval-expression(M-:)を使います。
edebugが処置中に構文エラーを検出すると、
コードのエラー箇所にポイントを置いて、
エラーinvalid-read-syntaxを通知します。
edebugの内側で使える他の評価関数についてはSee Edebug Eval。