GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Invoking-the-Debugger.html ・ emacs-doc.conao3.com

19.1.10 デバッガの呼び出し

ここでは、デバッガを呼び出すために使用される関数 debug について詳細に説明します。

コマンド: debug &rest debugger-args

この関数はデバッガに入ります。対話型セッションでは、*Backtrace*(デバッガへの2回目の再帰的な進入である場合は*Backtrace*<2>など)という名前のバッファに切り替え、そこにLisp関数呼び出しのスタックに関する情報を書き込みます。その後、再帰的な編集に入り、デバッガモードでバックトレースバッファを表示します。バッチモード(より一般的には、noninteractiveがnilでない場合。バッチモードを参照)では、この関数は標準エラーストリームにLispのバックトレースを表示します。backtrace-on-error-noninteractiveにnilをバインドすると、バッチモードでのバックトレースが抑制されます。詳細は後述します。

デバッガモードの c、d、j、および r コマンドは再帰的な編集を終了し、その後 debug が直前のバッファに切り替えて、debug を呼び出した元の処理に戻ります。関数 debug が呼び出し元に戻るには、この方法しかありません。

debugger-args を使用するのは、debug が残りの引数を *Backtrace* バッファの先頭に表示し、ユーザーがそれらを確認できるようにするためです。以下に述べる場合を除き、これらの引数が使用される方法はこれのみです。

ただし、debug の第1引数に指定される特定の値には、特別な意味があります。(通常、これらの値は Emacs の内部処理でのみ使用され、debug を呼び出すプログラマが使用することはありません。)以下に、これらの特別な値の一覧を示します。

lambda

lambda の第1引数は、debug-on-next-call が nil ではなかった際に関数へのエントリによって debug が呼び出されたことを意味します。デバッガはバッファの最上部にテキスト行として ‘Debugger entered--entering a function:’ を表示します。

debug

第1引数として debug が指定されるのは、エントリ時にデバッグモードに設定された関数に入ったため、debug が呼び出されたことを意味します。デバッガは、lambda の場合と同様に、文字列 ‘Debugger entered--entering a function:’ を表示します。また、その関数のスタックフレームにマークを付けることで、関数終了時にデバッガが呼び出されるようにします。

t

第1引数が t の場合、これは debug-on-next-call が nil でないときに関数呼び出し形式が評価され、debug が呼び出されることを示します。デバッガはバッファの最上行に ‘Debugger entered--beginning evaluation of function call form:’ と表示します。

exit

第1引数が 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 の先頭に nil を指定してください。debugger-args の残りの部分は、バッファの最上行に表示されます。この機能を利用してメッセージを表示できます—例えば、debug が呼び出される条件を忘れないようにするなどです。

変数: backtrace-on-error-noninteractive

この変数がデフォルトの nil 以外の場合、バッチモードでデバッガを起動すると Lisp 関数呼び出しのバックトレースが表示されます。この変数に nil の値をバインドすると、バックトレースが抑制され、エラーメッセージのみが表示されます。