Next: Infinite Loops, Up: Debugger [Contents][Index]
デバッガに入る一番重要なタイミングは、Lispエラーが発生したときです。デバッガでは、エラーの直接原因を調査できます。
しかしデバッガへのエンターは、エラーによる通常の結末ではありません。多くのコマンドは不適切に呼び出されたときにLispエラーをシグナルするので、通常の編集の間にこれが発生するたびデバッガにエンターするのは、とても不便でしょう。したがって、エラーの際にデバッガにエンターしたい場合は、変数debug-on-error
に非nil
をセットします。(コマンドtoggle-debug-on-error
は、これを簡単に行う方法を提供します。)
この変数はエラーがシグナルされ、それがハンドルされていないときに、デバッガが呼び出されるかどうかを決定します。debug-on-error
がt
の場合は、debug-ignored-errors
(以下を参照)にリストされているエラーを除く、すべての種類のエラーがデバッガを呼び出します。nil
の場合は、デバッガを呼び出しません。
値にはエラー条件(Signaling Errorsを参照)のリストも指定できます。その場合、このリスト内のエラー条件だけにより、デバッガが呼び出されます(debug-ignored-errors
にもリストされているエラー条件は除外されます)。たとえば、debug-on-error
をリスト(void-variable)
にセットした場合には、値をもたない変数に関するエラーにたいしてだけデバッガが呼び出されます。
eval-expression-debug-on-error
がこの変数をオーバーライドする場合がいくつかあることに注意してください(以下を参照)。
この変数が非nil
のとき、Emacsはプロセスフィルター関数と番兵(sentinel)の周囲にエラーハンドラーを作成しません。したがって、これらの関数内でのエラーは、デバッガを呼び出します。Processesを参照してください。
この変数は、debug-on-error
の値に関わらず、デバッガにエンターすべきでないエラーを指定します。変数の値はエラー条件のシンボル、および/または正規表現のリストです。エラーがこれら条件シンボルのいずれか、またはエラーメッセージが正規表現のいずれかにマッチする場合、そのエラーはデバッガにエンターしません。
この変数の通常の値にはuser-error
と、同様に編集中にしばしば発生するがLispプログラムのバグによるものはほとんどない、いくつかのエラーが含まれます。しかし、“ほとんどない”は“絶対ない”ではありません。あなたのプログラムがこのリストにマッチするエラーにより機能しない場合は、そのエラーをデバッグするために、このリストの変更を試みるのもよいでしょう。通常はdebug-ignored-errors
をnil
にセットしておくのが、もっとも簡単な方法です。
この変数が非nil
値(デフォルト)の場合は、コマンドeval-expression
の実行により、一時的にdebug-on-error
がt
がバインドされます。Evaluating Emacs-Lisp Expressions in The GNU Emacs
Manualを参照してください。
eval-expression-debug-on-error
がnil
の場合は、eval-expression
の間もdebug-on-error
の値は変更されません。
condition-case
によりキャッチされたエラーは通常、決してデバッガを呼び出しません。condition-case
は、デバッガがそのエラーをハンドルする前に、エラーをハンドルする機会を得ます。
debug-on-signal
を非nil
値に変更した場合は、condition-case
の存在如何に関わらず、すべてのエラーにおいてデバッガが最初に機会を得ます。(デバッガを呼び出すためには、依然としてそのエラーがdebug-on-error
とdebug-ignored-errors
で指定された条件を満たさなければなりません。)
警告:
この変数を非nil
にセットすると、芳しくない効果があるかもしれません。Emacsのさまざまな部分で処理の通常の過程としてエラーがキャッチされており、そのエラーが発生したことに気づかないことさえあるかもしれません。condition-case
でラップされたコードをデバッグする必要がある場合は、condition-case-unless-debug
(see Handling Errorsを参照)の使用を考慮してください。
debug-on-event
をスペシャルイベント(Special Eventsを参照)にセットした場合は、Emacsはspecial-event-map
をバイパスして、このイベントを受け取ると即座にデバッガへのエンターを試みます。現在のところサポートされる値は、シグナルSIGUSR1
およびSIGUSR2
に対応する値だけです(これがデフォルトです)。これはinhibit-quit
がセットされていて、それ以外はEmacsが応答しない場合に有用かもしれません。
debug-on-message
に正規表現をセットした場合には、それにマッチするメッセージがエコーエリアに表示されると、Emacsはデバッガにエンターします。たとえば、これは特定のメッセージの原因を探すのに有用かもしれません。
initファイルロード中に発生したエラーをデバッグするには、オプション‘--debug-init’を使用します。これはinitファイルロードの間にdebug-on-error
をt
にバインドして、通常はinitファイル内のエラーをキャッチするcondition-case
をバイパスします。