次: 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を呼び出した条件の覚え書きにする。