Next: Edebug Execution Modes, Previous: Using Edebug, Up: Edebug [Contents][Index]
LispコードのデバッグにEdebugを使用するためには、最初にそのコードをインストルメント(instrument: 計装)しなければなりません。コードをインストルメントすると、適切な位置で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-defun
はedebug-eval-top-level-form
のエイリアスです。
Edebugがアクティブのの間、コマンドI(edebug-instrument-callee
)は、ポイント後のリストフォームに呼び出される関数およびマクロ定義がまだインストルメントされていなければ、それらをインストルメントします。これは、そのファイルのソースの場所をEdebugが知っている場合だけ可能です。この理由によりEdebugロード後は、たとえ評価する定義をインストルメントしない場合でも、eval-region
は評価するすべての定義の位置を記録します。インストルメント済み関数呼び出しにステップインするiコマンド(Jumpingを参照)も参照してください。
Edebugはすべての標準スペシャルフォーム、式引数をもつinteractive
フォーム、無名ラムダ式、およびその他の定義フォームのインストルメント方法を知っています。しかし、Edebugはユーザー定義マクロが引数にたいして何を行うかを判断できないので、Edebug仕様を使用してその情報を与えなければなりません。詳細はEdebug and Macrosを参照してください。
Edebugがセッション内で最初にコードをインストルメントしようとするときは、フックedebug-setup-hook
を実行してから、それにnil
をセットします。使おうとしているパッケージに結びつけてEdebug仕様をロードするためにこれを使用できますが、それはEdebugを使用するときだけ機能します。
定義からインストルメントを削除するには、単にインストルメントを行わない方法でその定義を再評価するだけです。フォームを絶対にインストルメントせずに評価するには、2つの方法があります。それはファイルからのload
による評価と、ミニバッファーからのeval-expression
(M-:)による評価です。
Edebugがインストルメント中にシンタックスエラー(syntax error:
構文エラー)を検知した場合は、間違ったコードの箇所にポイントを残してinvalid-read-syntax
エラーをシグナルします。
Edebug内で利用可能な他の評価関数については、Edebug Evalを参照してください。