Go to the first, previous, next, last section, table of contents.

Emacs Lispデバッガ

GNU Emacsにはその中で実行するLispプログラム用のデバッガがあります.こ のデバッガは普通は使われません.多くのコマンドは,不適切なところで呼び出 されると(たとえば,バッファの最後でのC-f),Lispエラーとなりますが, これによって特別なデバッグモードになってしまっては非常に困ります.Lispエ ラーでデバッガを呼び出す必要のあるときは,変数debug-on-errorを non-nilに設定しなければなりません.C-gで抜け出るのはエラー とみなしません.debug-on-errorC-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つの式をステップ実行するのに主に使われます.次 にコマンドを示します.

c
デバッガを出て実行を再開します.たいていの場合,デバッガにはいらなかった ように(デバッガ内で変更した変数やデータ構造の作用は別として)プログラムの 実行を続けます.これには,関数の入口,出口,陽に呼び出したとき, C-gによるとり止め,エラーによってデバッガにはいったとき,などがあ ります.エラーのときはたいてい続行ができません.エラーの後で続行しても, 再び同じエラーが起きるからです.
d
実行を再開しますが,次にLisp関数が呼び出されるとデバッガにはいります.こ れによって,1つの式の中の各関数をステップ実行することができ,それらの式 の値など実行状況を見ることができます. このようにしてデバッガにはいった関数呼び出しのスタックフレームには,その 関数から出るときにもデバッガにはいるように自動的に印が付けられます.この 印を消すにはuコマンドを使います.
b
現在のフレームから出るときにデバッガにはいるように準備します.抜け出すと きにデバッガを呼び出すフレームには,星が表示されます.
u
現在のフレームから出るときにはデバッガにはいらないようにします.これはフ レームでのbコマンドの取り消しになります.
e
Lisp式をミニバッファから読み込んで評価し,その値をエコー領域に表示します. eM-ESCと同じですが,M-ESCとは違って使用 禁止にはなっていません.
q
デバッグしているプログラムを終了します.Emacsのコマンド実行のトップレベ ルに戻ります. C-gによってデバッガにはいったが,デバッグではなく本当に終了したい ときにqコマンドを使います.
r
デバッガから値を返します.その値はミニバッファで式を読み込み,評価して求 めます. Lispフレームから抜ける時点で呼び出されたデバッガでは(bが指 定されたとき)違いがでます.rコマンドで設定された値は,そのフレーム の値として使われます. デバッガの返す値は多くのエラーに関しても重要です.たとえば, wrong-type-argumentエラーは,無効の引数の代わりにデバッガの返す値 を使います.Lisp関数signalの呼び出しでエラーになった場合は,デバッ ガの返す値はsignalの返す値になります.

Go to the first, previous, next, last section, table of contents.