次: Internals of Debugger, 前: Debugger Commands, 上: Debugger
ここでは、デバッガを起動するために使われる関数debug
の詳細を述べます。
この関数はデバッガに入る。 `*Backtrace*'(あるいはデバッガの第2レベルに再帰的に入ると `*Backtrace*<2>'など)という名前のバッファに切り替え、 Lisp関数の呼び出しスタックに関する情報でこのバッファを満たす。 そして再帰編集に入りdebuggerモードのバックトレースバッファを表示する。
debuggerモードのコマンドcやrで再帰編集から抜けだし、
debug
はそれ以前のバッファに切り替えdebug
を呼び出したところへ戻る。 これは、関数debug
が呼び出し側へ戻る唯一の手段である。debugger-argsの使い途は、
debug
が引数の残りをバッファ`*Backtrace*'の先頭に表示し、 ユーザーが読めるようにすることである。 以下に述べる場合を除いて、これがこれらの引数の唯一の用途である。
debug
の第1引数が特定の値を持つ場合、特別な意味がある。 (通常、これらの値はEmacs内部で用いるだけであり、 プログラマがdebug
を呼ぶときには使わない。) 以下にこれらの特別な値を示す。
lambda
- 第1引数が
lambda
であると、debug-on-next-call
がnil
以外であるために 関数に入るときにdebug
を呼び出したことを意味する。 デバッガはバッファの先頭にテキスト行`Entering:'を表示する。debug
- 第1引数が
debug
であると、 関数に入るときにデバッガを起動するようになっていたためにdebug
を呼び出したことを示す。 デバッガは、lambda
の場合と同様に、`Entering:'を表示する。 さらに、当該関数のスタックフレームに関数から 戻るときにデバッガを起動するように印を付ける。t
- 第1引数が
t
であると、debug-on-next-call
がnil
以外であるときに フォームの並びを評価したためにdebug
を呼び出したことを示す。 デバッガはバッファの先頭行につぎの行を表示する。Beginning evaluation of function call form:exit
- 第1引数が
exit
であると、 スタックフレームから抜けるときにデバッガを呼び出すように印を 付けたスタックフレームから抜けたことを示す。 この場合、debug
の第2引数はフレームからの戻り値である。 デバッガはバッファの先頭行に`Return value:'に続けて戻り値を表示する。error
- 第1引数が
error
であると、 エラーやquit
が通知されたが処理されないためにデバッガに入ったことを示し、 `Signaling:'に続けて通知されたエラーとsignal
の引数を表示する。 たとえばつぎのとおり。(let ((debug-on-error t)) (/ 1 0)) ------ Buffer: *Backtrace* ------ Signaling: (arith-error) /(1 0) ... ------ Buffer: *Backtrace* ------エラーが通知されたときには、 変数
debug-on-error
はnil
以外であるはずである。quit
が通知されたときには、 変数debug-on-quit
はnil
以外であるはずである。nil
- 明示的にデバッガに入るときには、 debugger-argsの先頭として
nil
を使う。 debugger-argsの残りはバッファの先頭行に表示される。 この機能を用いてメッセージを表示でき、 たとえば、debug
を呼び出した条件の覚え書きにする。