Emacs Lispをデバッグしていて、特定の関数の引数と返り値を
トレースしたくなることはよくあります。
そのときは標準添付の trace.el を使います。
M-x trace-function で、トレースする関数と
トレース結果を出力するバッファを指定します。
その後で対象関数を呼び出すと、
トレース結果のバッファが
ポップアップします。
トレースをやめるには M-x untrace-function や
M-x untrace-all を使います。
しかし、これらのコマンドはわざわざ関数名を
入力する必要があるため使いづらいものです。
そこで、現在の関数(defun)を評価するC-M-xに
組み込んでしまいましょう。
元々 C-u C-M-x で現在の関数を
edebug デバッガにかけることができるので、
C-u C-u C-M-xでtrace-function、
C-u C-u C-u C-M-xでuntrace-function
することにしました。
トレースの詳しい使い方は
旧ブログ:デバッグの第一歩!Emacs Lisp関数をトレースする方法 を
参照してください。
設定 141001104025.eval-defun.trace-function.el(以下のコードと同一)
(require 'cl-lib) (defun current-defun () (save-excursion (beginning-of-defun) (forward-char 1) (forward-sexp 2) (symbol-at-point))) (defun eval-defun-or-trace-function (arg) "C-M-xにtrace-functionの機能をつける" (interactive "p") (cl-case arg (64 (untrace-function (current-defun)) (message "untrace-function: %s" (current-defun))) (16 (trace-function (current-defun)) (message "trace-function: %s" (current-defun))) (4 (eval-defun t)) (t (eval-defun nil)))) (define-key emacs-lisp-mode-map (kbd "C-M-x") 'eval-defun-or-trace-function)
実行方法
$ wget http://rubikitch.com/f/141001104025.eval-defun.trace-function.el $ emacs -Q -f package-initialize -l 141001104025.eval-defun.trace-function.el
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。