以下のオプションはEdebugの動作に影響を与えます:
Edebugが使用される前に呼び出される関数。この関数は毎回新たな値をセットする。Edebugはこれらの関数を一度呼び出したら、その後にedebug-setup-hook
をnil
にリセットする。使用するパッケージに関係するEdebug仕様をロードするために使用でdきるがそれはEdebugを使用するときだけである。Edebugのためのインストルメントを参照のこと。
これが非nil
の場合にdefun
やdefmacro
のような定義フォームの普通に評価すると、Edebug用にインストルメントされる。これはeval-defun
、eval-region
、eval-buffer
に適用される。
このオプションの切り替えにはコマンドM-x edebug-all-defsを使用する。Edebugのためのインストルメントを参照のこと。
これが非nil
の場合にはeval-defun
、eval-region
、eval-buffer
はたとえフォームが何も定義していなくても、すべてのフォームをインストルメントする。これはロードとミニバッファー内の評価には適用されない。
このオプションの切り替えにはコマンドM-x edebug-all-formsを使用する。Edebugのためのインストルメントを参照のこと。
これが非nil
なら、すべてのマクロ引数が生成されるコード内にインストルメントされる。debug
宣言はこのオプションをオーバーライドする。ある引数を評価して他の引数は評価しないマクロにたいする例外を指定するためには、debug
宣言を指定するためはEdebugフォーム仕様を使用すること。
このオプションが非nil
なら、Edebugはウィンドウ構成の保存とリストアを行う。これには幾分時間を要するので、あなたのプログラムがウィンドウ構成に何が起こったかを気にしないようなら、この変数にはnil
をセットしたほうがよい。このオプションがデフォルト値のままだとウィンドウ構成の保存やリストアの結果として、デバッグ中のプログラムに含まれるバッファーのポイント位置がEdebugに上書きされてしまう場合もnil
にセットすることをお勧めする。これはあなたのプログラムがこのようなバッファーの1つ以上でポイントを移動した場合に起こり得る。他にも後述のedebug-save-displayed-buffer-points
のカスタマイズを試してみるという手もある。
edebug-save-windows
の値がリストなら、リストされたウィンドウだけが保存およびリストアされる。
Edebug内ではこの変数をインタラクティブに変更するためにWコマンドを使用できる。Edebugの表示の更新を参照のこと。
これが非nil
ならEdebugは表示されているすべてのバッファー内のポイントを保存およびリストアする。
選択されていないウィンドウ内に表示されているバッファーのポイントを変更するコードをデバッグしている場合は、他のバッファーのポイントを保存およびリストアする必要がある。その後にEdebugまたはユーザーがそのウィンドウを選択した場合は、そのバッファー内のポイントはそのウィンドウのポイント値に移動される。
すべてのバッファー内のポイントの保存とリストアは、それぞれのウィンドウを2回選択する必要があり高価な処理なので、必要なときだけ有効にする。Edebugの表示の更新を参照のこと。
この変数が非nil
なら、Edebugが最初にアクティブになったときのEdebugの最初の実行モードを指定する。指定できる値はstep
、next
、go
、Go-nonstop
、trace
、Trace-fast
、continue
、Continue-fast
。
デフォルト値はstep
。この変数はC-x C-a C-mでインタラクティブにセットできる。Edebugの実行モードを参照のこと。
これが非nil
なら各関数のエントリーとexitをトレースする。トレース出力は関数のエントリーとexitを行ごとに、再帰レベルにしたがって*edebug-trace*という名前のバッファーに表示される。
トレースバッファーのedebug-tracing
も参照されたい。
非nil
ならEdebug外部で実行されている任意のキーボードマクロの定義または実行を継続する。これはデバッグされないので慎重に使用すること。Edebugの実行モードを参照されたい。
非nil
ならEdebugは式の結果を表示するときに、その式自体のインストルメント結果の削除を試みる。マクロをデバッグするときは、式の結果自体がインストルメントされた式になるということに関連するオプションである。実際的な例ではないが、サンプル例の関数fac
がインストルメントされたとき、そのフォームのマクロを考えてみるとよい。
(defmacro test () "Edebug example." (if (symbol-function 'fac) ...))
test
マクロをインストルメントしてステップ実行すると、デフォルトではsymbol-function
呼び出しは多数のedebug-after
フォームとedebug-before
フォームをもつことになり、それにより実際の結果の確認が難しくなり得る。edebug-unwrap-results
が非nil
ならEdebugは結果からこれらのフォームの削除を試みる。
debug-on-error
が以前nil
だったら、Edebugはdebug-on-error
をこの値にバインドする。エラーのトラップを参照のこと。
debug-on-quit
の以前の値がnil
なら、Edebugはdebug-on-quit
にこの値をバインドする。エラーのトラップを参照のこと。
Edebugがアクティブな間にedebug-on-error
かedebug-on-quit
の値を変更したら、次回に新たなコマンドを通じてEdebugが呼び出されるまでこれらの値は使用されない。
非nil
なら、値はすべてのステップポイントでテストされる式である。式の結果がnil
ならbreakする。エラーは無視される。グローバルなブレーク条件を参照のこと。
実行モードがtraceかcontinueでbreakpointに達した際に一時停止する秒数。Edebugの実行モードを参照のこと。
breakpointに達したときにedebug-sit-for-seconds
の間、一時停止するかどうか。nil
で一時停止の抑止、非nil
なら一時停止を許可。
デフォルトでは、このalistにはキーがedebug
で3つの関数edebug-enter
、edebug-before
、edebug-after
からなるリストという1つのエントリーが含まれる。これらの関数はインストルメントされるコードに挿入される関数のデフォルト実装である。Edebugの全般的な挙動を変更するためには、このデフォルトエントリーを変更する。
Edebugの挙動はこのalistにエントリーにユーザーが選択したキーと3つの関数を追加することにより、定義ごとにもとづいて変更もできる。それからインストルメントされた定義のシンボルプロパティedebug-behavior
に新たなエントリーのキーをセットすれば、Edebugはその定義にたいして自身の関数を呼び出す箇所で新たな関数を呼び出す。
定義やクロージャのbodyをラップした後にEdebugが実行する関数。Edebugが自身のデータを初期化後に、この関数は定義に関連付けられたシンボル(Edebugが定義または生成した実際のシンボルかもしれない)を単一の引数として呼び出される。この関数はEdebugによりインストルメントされる各定義のシンボルプロパティedebug-behavior
をセットするために使用されるかもしれない。
使用前にEdebugのインストルメントの検査や修正を行うには、インストルメントするトップレベルのフォームを単一の引数として受け取り、その後にEdebugがインストルメントの最終結果として使用することになる同一フォームあるいは置換フォームをリターンする関数をこの変数にセットする。