GNU Emacsにはその中で実行するLispプログラム用のデバッガがあります.こ
のデバッガは普通は使われません.多くのコマンドは,不適切なところで呼び出
されると(たとえば,バッファの最後でのC-f),Lispエラーとなりますが,
これによって特別なデバッグモードになってしまっては非常に困ります.Lispエ
ラーでデバッガを呼び出す必要のあるときは,変数debug-on-error
を
non-nil
に設定しなければなりません.C-gで抜け出るのはエラー
とみなしません.debug-on-error
はC-gの操作には効果がありませ
ん.しかし,debug-on-quit
をnon-nil
に設定すると,C-g
でデバッガが呼び出されます.これは無限ループをデバッグするのに便利です.
ループが手以上状態になったらC-gを入力します.debug-on-quitは
エラーには効果ありません.
指定した関数が呼び出されたとき,あるいはLispコードの特定の場所でデバッ
ガを呼び出すこともできます.M-x debug-on-entryに引数fun-name
を与えて実行すると,関数fun-nameが呼び出されたらすぐにデバッガには
いるようになります.M-x cancel-debug-on-entryによって,呼び出して
もデバッガにははいらなくなります(その関数を再定義してもデバッガにはいる
のを止めることができます).Lispコードの他の場所からデバッガにはいるには,
そこに式(debug
)を挿入し,変更されたコードをC-M-xで評価して
おきます.See section Emacs Lisp式の評価.
デバッガにはいるとウィンドウを分割して,別のウィンドウに `*Backtrace*'という名前のバッファを表示します.バックトレースバッファ には,1行ごとに現在のLisp関数実行の各レベルが示されます.このバッファの 最初に,デバッガが呼び出された理由を示したメッセージがあります(たとえば エラーによって呼び出された場合は,エラーメッセージです).
バックトレースバッファは読み取り専用で,Backtraceモードという特別のモー ドになっています.そこでは,文字がデバッガコマンドとして定義されています. 普通のEmacs編集コマンドも使えます.エラーの際に編集していたバッファを調 べるためにウィンドウの切替えもできます.バッファの切替え,ファイルの読み 込みなどの編集もできます.しかしデバッガは再帰編集レベルにあります (see section 再帰編集レベル).デバッガを使う必要がなくなったときは,バックト レースバッファに戻って正式にデバッガを出なければなりません.デバッガから 出るとバックトレースバッファは削除されます.
バックトレースバッファには実行している関数とそれに与えられた引数が表示 されます.またポイントを動かして行が示しているスタックフレームを指定する 目的にも使えます.ポイントがある行のフレームを現在のフレームとみなします. デバッガコマンドは一度に1つの式をステップ実行するのに主に使われます.次 にコマンドを示します.
wrong-type-argument
エラーは,無効の引数の代わりにデバッガの返す値
を使います.Lisp関数signal
の呼び出しでエラーになった場合は,デバッ
ガの返す値はsignal
の返す値になります.