Next: Internals of Debugger, Previous: Debugger Commands, Up: Debugger [Contents][Index]
以下では、デバッガを呼び出すために使用される関数debug
の完全な詳細を説明します。
この関数は、デバッガにエンターします。この関数は*Backtrace*(デバッガへの2回目以降の再帰エントリーでは*Backtrace*<2>、...)という名前のバッファーにバッファーを切り替えて、Lisp関数呼び出しについての情報を書き込みます。それから再帰編集にエンターして、Debuggerモードでbacktraceバッファーを表示します。
Debuggerモードのコマンドc、d、j、rは再帰編集をexitします。その後、debug
は以前のバッファーに戻って、debug
を呼び出したものが何であれ、そこにリターンします。これは関数debug
が呼び出し元にリターン可能な唯一の方法です。
debugger-argsを使用すると、debug
は*Backtrace*の最上部に残りの引数を表示するもで、ユーザーがそれらを確認できます。以下で説明する場合を除き、これは、これらの引数を使用する唯一の方法です。
しかしdebug
への1つ目の引数にたいする値は、特別な意味をもちます。(これらの値は通常、debug
を呼び出すプログラマーではなく、Emacs内部でのみ使用されます。)
以下はこれら特別な値のテーブルです:
lambda
1つ目の引数galambda
の場合、それはdebug-on-next-call
が非nil
のときに関数にエントリーしたことによりdebug
が呼び出されたことを意味する。デバッガはバッファーのトップのテキスト行に‘Debugger
entered--entering a function:’と表示する。
debug
1つ目の引数がdebug
の場合、それはエントリー時にデバッグされるようにセットされた関数にエントリーしたことによりdebug
が呼び出されたことを意味する。デバッガはlambda
のときと同様、‘Debugger
entered--entering a
function:’を表示します。これはその関数のスタックフレームもマークするので、exit時にデバッガが呼び出される。
t
1つ目の引数がt
の場合、それはdebug-on-next-call
が非nil
のときに関数呼び出しの評価によりdebug
が呼び出されたことを示す。デバッガはバッファーのトップの行に‘Debugger
entered--beginning evaluation of function call form:’と表示する。
exit
1つ目の引数がexit
のときは、exit時にデバッガを呼び出すよう以前にマークされたスタックフレームをexitしたことを示す。この場合は、debug
に与えられた2つ目の引数が、そのフレームからリターンされた値になる。デバッガはバッファーのトップの行に‘Debugger
entered--returning value:’とリターンされた値を表示する。
error
1つ目の引数がerror
のときは、ハンドルされていないエラーまたはquit
がシグナルされてデバッガにエンターした場合で、デバッガは‘Debugger
entered--Lisp error:’とその後にシグナルされたエラーおよびsignal
への引数を表示して、それを示す。たとえば、
(let ((debug-on-error t)) (/ 1 0))
------ Buffer: *Backtrace* ------ Debugger entered--Lisp error: (arith-error) /(1 0) ... ------ Buffer: *Backtrace* ------
エラーがシグナルされた場合はおそらく、変数debug-on-error
は非nil
で、quit
がシグナルされた場合はおそらく、変数debug-on-quit
は非nil
である。
nil
明示的にデバッガにエンターしたいときは、debugger-argsの1つ目の引数にnil
を使用する。残りのdebugger-argsは、バッファーのトップの行にプリントされる。メッセージ
— たとえばdebug
が呼び出された条件を思い出すためのリマインダー — の表示にこの機能を使用できる。