デバッガバッファ(デバッガモード時)では、通常のEmacsコマンドや前節で説明したバックトレースモードのコマンドに加えて、特殊なコマンドが提供されています。デバッガコマンドの最も重要な用途は、コードをステップ実行して制御フローを確認することです。デバッガはインタプリタ関数の制御構造をステップ実行できますが、バイトコンパイルされた関数ではそれができません。バイトコンパイルされた関数をステップ実行したい場合は、その関数を同じ関数のインタプリタ定義に置き換えてください。(これを行うには、その関数のソースに移動し、定義箇所で C-M-x と入力します。)Lispデバッガを使用してプリミティブ関数をステップ実行することはできません。
デバッガコマンドの中には、現在のフレームに対して動作するものがあります。フレームがアスタリスクで始まっている場合、そのフレームを抜けると再びデバッガが呼び出されます。これは、関数の戻り値を調べる際に便利です。
デバッガモードのコマンド一覧は以下の通りです。
デバッガを終了し、実行を再開します。これにより、あたかもデバッガに入ったことがなかったかのようにプログラムの実行が再開されます(デバッガ内で変数の値やデータ構造を変更して生じた副作用は除きます)。
実行を継続し、次にLisp関数が呼び出された際にデバッガに入ってください。これにより、式の部分式をステップ実行しながら、それらがどのような値を計算し、他にどのような処理を行うかを確認できます。
このようにデバッガに入る関数呼び出し用に作成されたスタックフレームには、フレームを抜ける際に再びデバッガが呼び出されるよう、自動的にフラグが立てられます。u コマンドを使用して、このフラグを解除できます。
現在のフレームにフラグを立て、そのフレームを抜ける際にデバッガに入るようにします。このようにフラグが立てられたフレームは、バックトレースバッファ内で星印で表示されます。
現在のフレームを抜ける際にデバッガに入らないでください。これにより、そのフレームにおける b コマンドがキャンセルされます。目に見える効果としては、バックトレースバッファの行から星印が削除されます。
現在のフレームを b のようにフラグ立てします。次に c
のように実行を継続しますが、debug-on-entry
でそのように設定されているすべての関数について、エントリ時のブレークを一時的に無効にします。
ミニバッファ内のLisp式を読み込み、(該当する場合は適切な字句環境を用いて)評価し、その値をエコーエリアに表示します。デバッガは動作の一環として、特定の重要な変数やカレントバッファを変更しますが、e
はデバッガ外からの値を一時的に復元するため、それらを調べたり変更したりすることができます。これにより、デバッガの動作がより透過的になります。対照的に、M-:
はデバッガ内で特別な処理は行わず、デバッガ内部での変数の値を表示します。デフォルトでは、このコマンドは評価中のデバッガを抑制し、評価対象の式にエラーが発生しても、既存のエラーの上に新しいエラーが追加されないようにします。これを上書きするには、ユーザーオプション
debug-allow-recursive-debug に nil 以外の値を設定してください。
eと同様だが、評価結果をバッファ*Debugger-record*にも保存する。
デバッグ中のプログラムを終了し、Emacsのトップレベルコマンド実行に戻ります。
C-g によってデバッガに入ったものの、デバッグではなく本当に終了したい場合は、q コマンドを使用してください。
デバッガから値を返します。この値は、ミニバッファで式を読み取り、それを評価することで算出されます。
r コマンドは、Lisp のコールフレームからの復帰(b
による要求、または d
によるフレームへの進入)によってデバッガが呼び出された場合に有用です。このとき、r
コマンドで指定された値がそのフレームの値として使用されます。また、debug
を呼び出し、その戻り値を利用する場合にも有用です。それ以外の場合、r は c と同じ効果を持ち、指定された戻り値は影響しません。
エラーによりデバッガに入った場合は、r は使用できません。
呼び出された際にデバッガを起動する関数の一覧を表示します。これは、debug-on-entry
によってエントリ時にブレークするように設定された関数の一覧です。