次: , 前: Using Debugger, 上: Debugger


17.1.6 デバッガコマンド

デバッガ内(debuggerモード)では、 通常のカーソル移動コマンドに加えて以下の特別なコマンドを使えます。 (ウィンドウやバッファの切り替えなどのEmacsの通常の機能も使えることに留意。)

デバッガコマンドのもっとも重要な使い方はステップ実行であり、 これにより制御の流れを調べることです。 デバッガは、解釈実行版の関数の制御構造をステップ実行できますが、 バイトコンパイルした関数ではできません。 バイトコンパイルした関数をステップ実行したい場合には、 同じ関数を解釈実行版の定義に置き換える必要があります。 (これには、関数のソースを訪れて、その定義内でC-M-xと打つ。)

debuggerモードのコマンド一覧を以下に示します。

c
デバッガを終了し実行を継続する。 継続可能であれば、 (デバッガ内で行った変数値やデータ構造に対する変更などの副作用を除いて) デバッガを起動しなかったかのようにプログラムの実行を再開する。

継続が可能なのは、 関数呼び出し時や終了時、明示的な起動、中断によりデバッガに入った場合である。 エラーが原因でデバッガが起動されたときには継続できない。

d
実行を継続するが、任意のLisp関数を呼び出すとデバッガに入る。 これにより、式の部分式をステップ実行して 部分式が計算する値やその動作を調べることができる。

このようにしてデバッガを起動した関数呼び出しのスタックフレームには 自動的に印が付き、そのスタックから抜けるとデバッガがふたたび呼び出される。 この印を消すにはコマンドuを使う。

b
フレームから抜けるとデバッガに入るようにカレントフレームに印を付ける。 このように印を付けたフレームには、バックトレースバッファでは星印が付く。
u
カレントフレームから抜けるときにデバッガに入らない。 これは、当該フレームに対するコマンドbを取り消す。 視覚的にはバックトレースバッファの当該行から星印が取られる。
e
ミニバッファでLisp式を読み取り、それを評価し、その値をエコー領域に表示する。 この操作の一環として、デバッガは重要なある種の変数や カレントバッファを変更する。 eはそれらの値をデバッガの外側の値に一時的に復元するので、 それらを調べたり変更したりできる。 これによりデバッガは透過的になる。 対照的に、M-:はデバッガ内で特別なことは行わない。 デバッガ内での変数値を表示する。
R
eと同様であるが、 バッファ`*Debugger-record*'での評価結果も保存する。
q
デバッグ中のプログラムを終了する。 Emacsのトップレベルのコマンド実行へ戻る。

C-gでデバッガへ入ったが、 実際には中断したいのであってデバッグはしたくない場合には コマンドqを使う。

r
デバッガから値を指定して戻る。 その値は、ミニバッファで式を読み取り、それを評価して得る。

bで指定したりdでフレームに入ることで) Lispの呼び出しフレームから抜けでたためにデバッガが起動された場合に、 コマンドrは有用である。 コマンドrで指定した値は、当該フレームの値として使われる。 このコマンドは、debugを呼び出してその戻り値を使う場合にも有用である。 さもなければ、rcと同じ効果であり、指定した戻り値は関係ない。

エラーでデバッガに入った場合にはrは使えない。