Next: バックトレース, Previous: 明示的なデバッガへのエントリー, Up: Lispデバッガ [Contents][Index]
デバッガにエンターすると、その前に選択されていたウィンドウを1つのウィンドウに表示して、他のウィンドウに*Backtrace*という名前のバッファーを表示します。backtraceバッファーには、現在実行されているLisp関数の各レベルが1行ずつ含まれます。このバッファーの先頭は、デバッガが呼び出された理由を説明するメッセージ(デバッガがエラーにより呼び出された場合はエラーメッセージや関連するデータなど)です。
backtraceバッファーは読み取り専用で、文字キーにデバッガコマンドが定義されたDebuggerモードという特別なメジャーモードを使用します。通常のEmacs編集コマンドが利用できます。したがってエラー時に編集されていたバッファーを調べるためにウィンドウを切り替えたり、バッファーの切り替えやファイルのvisit、その他一連の編集処理を行なうことができます。しかしデバッガは再帰編集レベル(再帰編集を参照)にあり、編集が終わったらそれはbacktraceバッファーに戻って、(qコマンドで)デバッガをexitできます。デバッガをexitすることによって再帰編集を抜け出し、backtraceバッファーはバリー(bury:
覆い隠す)されます(変数debugger-bury-or-killw
をセットすることによってbacktraceバッファーでqコマンドが何を行うかをカスタマイズできる。たとえばバッファーをバリーせずにkillしたいなら、この変数をkill
にセットする。他の値については変数のドキュメントを調べてほしい)。
デバッガにエンターしたとき、eval-expression-debug-on-error
に一致するように変数debug-on-error
が一時的にセットされます。変数eval-expression-debug-on-error
が非nil
なら、debug-on-error
は一時的にt
にセットされます。これはデバッグのセッションを行っている間に更にエラーが発生すると、(デフォルトでは)別のバックトレースがトリガーされることを意味します。これが望ましくない場合にはeval-expression-debug-on-error
にnil
をセットするか、あるいはdebugger-mode-hook
でdebug-on-error
にnil
をセットするこれができます。
デバッガはLispインタープリターの状態について想定を行うので、バイトコンパイルされて実行されなければなりません。デバッガがインタープリターに解釈されて実行されているときは、これらの想定は正しくなくなります。