Next: Debugger Commands, Previous: Explicit Debug, Up: Debugger [Contents][Index]
デバッガにエンターすると、その前に選択されていたウィンドウを1つのウィンドウに表示して、他のウィンドウに*Backtrace*という名前のバッファーを表示します。backtraceバッファーには、現在実行されているLisp関数の各レベルが1行ずつ含まれます。このバッファーの先頭は、デバッガが呼び出された理由を説明するメッセージ(デバッガがエラーにより呼び出された場合はエラーメッセージや関連するデータなど)です。
backtraceバッファーは読み取り専用で、文字キーにデバッガコマンドが定義されたDebuggerモードという特別なメジャーモードを使用します。通常のEmacs編集コマンドが利用できます。したがってエラー時に編集されていたバッファーを調べるためにウィンドウを切り替えたり、バッファーの切り替えやファイルのvisit、その他一連の編集処理を行なうことができます。しかしデバッガは再帰編集レベル(Recursive Editingを参照)にあり、編集が終わったらそれは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
にセットされます。これはデバッグセッション行っている間にさらにエラーが発生すると、(デフォルトでは)他のbacktraceがトリガーされることを意味します。これが望ましくなければ、debugger-mode-hook
内でeval-expression-debug-on-error
をnil
にセットするか、debug-on-error
をnil
にセットすることができます。
backtraceバッファーは実行されている関数と、その関数の引数の値を示します。そのフレームを示す行にポイントを移動して、スタックフレームを指定することもできます(スタックフレームとは、Lispインタープリターがある関数への特定の呼び出しを記録する場所のこと)。行ポイントがオンのフレームが、カレントフレーム(current frame)となります。デバッガコマンドのいくつかは、カレントフレームを処理します。ある行がスター(star)で始まる場合は、そのフレームをexitすることによって再びデバッガが呼び出されることを意味します。これは関数のリターン値を調べるとき有用です。
関数名にアンダーラインが引かれている場合は、デバッガがその関数のソースコードの位置を知っていることを意味します。その名前をマウスでクリックするか、そこに移動してRETをタイプすれば、ソースコードをvisitできます。
デバッガはデバッガ自身のスタックフレーム数を想定するため、バイトコンパイルされて実行されなければなりません。デバッガがインタープリターに解釈されて実行されているときは、これらの想定は正しくなくなります。