Next: , Previous: Debugger Commands, Up: Debugger


17.1.7 デバッガの起動

ここでは、デバッガを起動するために使われる関数debugの詳細を述べます。

— Function: debug &rest debugger-args

この関数はデバッガに入る。 ‘*Backtrace*’(あるいはデバッガの第2レベルに再帰的に入ると ‘*Backtrace*<2>’など)という名前のバッファに切り替え、 Lisp関数の呼び出しスタックに関する情報でこのバッファを満たす。 そして再帰編集に入りdebuggerモードのバックトレースバッファを表示する。

debuggerモードのコマンドcrで再帰編集から抜けだし、 debugはそれ以前のバッファに切り替え debugを呼び出したところへ戻る。 これは、関数debugが呼び出し側へ戻る唯一の手段である。

debugger-argsの使い途は、 debugが引数の残りをバッファ‘*Backtrace*’の先頭に表示し、 ユーザーが読めるようにすることである。 以下に述べる場合を除いて、これがこれらの引数の唯一の用途である。

debugの第1引数が特定の値を持つ場合、特別な意味がある。 (通常、これらの値はEmacs内部で用いるだけであり、 プログラマがdebugを呼ぶときには使わない。) 以下にこれらの特別な値を示す。

lambda
第1引数がlambdaであると、 debug-on-next-callnil以外であるために 関数に入るときにdebugを呼び出したことを意味する。 デバッガはバッファの先頭にテキスト行‘Entering:’を表示する。
debug
第1引数がdebugであると、 関数に入るときにデバッガを起動するようになっていたために debugを呼び出したことを示す。 デバッガは、lambdaの場合と同様に、‘Entering:’を表示する。 さらに、当該関数のスタックフレームに関数から 戻るときにデバッガを起動するように印を付ける。
t
第1引数がtであると、 debug-on-next-callnil以外であるときに フォームの並びを評価したために 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-errornil以外であるはずである。 quitが通知されたときには、 変数debug-on-quitnil以外であるはずである。

nil
明示的にデバッガに入るときには、 debugger-argsの先頭としてnilを使う。 debugger-argsの残りはバッファの先頭行に表示される。 この機能を用いてメッセージを表示でき、 たとえば、debugを呼び出した条件の覚え書きにする。