Next: Edebug Execution Modes, Previous: Using Edebug, Up: 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。