再表示によって呼び出されたLispコード内でエラーが発生した際には、技術的な理由によりEmacsでの通常時のデバッグメカニズムが使えなくなります。このサブセクションではそのようなエラーからどのようにしてバックトレースを取得するかを説明します。デバッグ中に役に立つはずです。
これらの説明はたとえばモードライン構文:eval
(モードラインのデータ構造を参照)のように、再表示から呼び出される以下のようなすべてのフック内で使用されているLispフォームに適用されます。
fontification-functions
(フェイスの自動割り当てを参照)
window-scroll-functions
(ウィンドウのスクロールと変更のためのフックを参照)
再表示から呼び出されたフック関数でエラーが発生すると、エラー処理によってその関数がフックから削除されているかもしれないことに注意してください。したがってそのバグを再現するためにそのフックを何らかの手段、恐らくはadd-hook
を使って再初期化する必要があるでしょう。
これらのような状況下でバックトレースを生成するには、変数backtrace-on-redisplay-error
に非nil
をセットします。エラーが発生するとEmacsはバッファー*Redisplay-trace*にバックトレースをダンプしますが、そのバッファーを自動的にウィンドウには表示しません。これはデバッグ中の再表示弐不必要な破壊を避けるためです。したがってswitch-to-buffer-other-frame
C-x 5 bのようなコマンドによって、このバッファーを自分で表示する必要があります。
再表示から呼び出されたすべてのLispにたいしてエラー発生時のバックトレース生成を有効にするには、この変数に非nil
をセットする。