Next: , Previous: Using Edebug, Up: Edebug


17.2.2 edebug向けの処置

Lispコードのデバッグにedebugを使うためには、 コードをまず処置する必要があります。 コードを処置すると、適当な箇所でedebugを起動する追加のコードを挿入します。

いったんedebugをロードすると、 コマンドC-M-xeval-defun)は再定義されます。 定義内で前置引数を指定して起動すると 定義を評価するまえに処置するようになります。 (ソースコード自体は変更しない。) 変数edebug-all-defsnil以外であると、 前置引数の意味を逆にします。 つまり、前置引数を指定しない限りC-M-xは関数定義を処置します。 変数edebug-all-defsのデフォルト値はnilです。 コマンドM-x edebug-all-defsは変数edebug-all-defsの値を トグルします。

edebug-all-defsnil以外であると、 コマンドeval-regioneval-current-buffereval-bufferも それらが評価する定義を処置します。 同様に、edebug-all-formsは、 定義以外のフォームであってもeval-region任意のフォームを処置するかどうか制御します。 これは、ミニバッファでのロードや評価には適用されません。 コマンドM-x edebug-all-formsはこのオプションをトグルします。

別のコマンドM-x edebug-eval-top-level-formは、 edebug-all-defsedebug-all-formsの値に関わらず 任意のトップレベルのフォームを処置するために使えます。

edebugが動作中は、 コマンドIedebug-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-expressionM-:)を使います。

edebugが処置中に構文エラーを検出すると、 コードのエラー箇所にポイントを置いて、 エラーinvalid-read-syntaxを通知します。

edebugの内側で使える他の評価関数についてはSee Edebug Eval