Emacsでelispをデバッグする方法

Emacselispデバッグする方法をまとめます

emacs 起動時に elisp でエラーが出る場合

debug-on-error

emacs 起動時に elisp でエラーが出る場合は ~/.emacs.d/early-init.el で debug-on-error を t に設定する方法が便利です

(setq debug-on-error t)

debug-on-error を t にしておくと,エラー時に Backtrace が表示され,デバッガが起動します.

backtraceが表示されるので,どこでエラーが発生したか確認できます

early-init.el は emacs起動時に最初に読み込まれるファイルです.~/.emacs などよりも先にロードされるので,autoload 関連のエラーなども catch できます.

elisp-bug-hunter

github.com

elisp-bug-hunter を使うと init.el や .emacs にあるバグが自動で検出できます

使い方も簡単で,まずインストール

M-x package-install RET bug-hunter

自動検出は

M-x bug-hunter-init-file RET e

これだけでエラーがある行を特定できます!

特定の関数をデバッグしたい場合

debug-on-entry

debug-on-entry で関数にブレークポイントが設定できます

M-x debug-on-entry RET 関数名 RET

関数が起動されるとデバッガが起動します.backtraceが表示されるので 'd' をタイプするとステップ実行できます.

デバッガの操作方法は,とりあえず

  • 'd' ステップ実行
  • 'c' デバッガ終了
  • '?' ヘルプの表示

を覚えておけば何とかなります.困ったら '?' です

コーディングしながらデバッグしたい場合

lispxmp

github.com

lispxmp が便利です

設定は use-package で

(use-package lispxmp
  :commands (lispxmp))
(use-package elisp-mode
  :bind (("C-c C-c" . lispxmp)))

使い方は,ソースコードで,コメント文に "; => " を書いておいて

(+ 3 4) ; =>

"C-c C-c"を実行すると

(+ 3 4) ; => 7

とS式の実行結果がコメント文に書き込まれます

なお lispxmp.el の作者,るびきち氏(は「Emacsテクニックバイブル」と言う書籍を出版しています.