@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Emacs Lisp: 関数のトレースを出力する

edebug-trace に nil 以外の値をセットする。

Edebug Options (GNU Emacs Lisp Reference Manual)

(setq edebug-trace t) ;; <- これを評価する (C-M-x or カーソルを末尾に置いて C-x C-e)

(defun fact (n)
  (if (zerop n) 1
    (* n (fact (1- n))))) ;; <- edebug を有効にして評価する (C-u C-M-x)

(fact 5) ;; <- 評価する (C-M-x or カーソルを末尾に置いて C-x C-e

*edebug-trace* というバッファが開き、 edebug によるデバッガモードが開始する。c を押してとりあえず関数を実行させて(== トレースをすべて展開出力させて)からじっくり眺める。

{ fact args: (5)
:{ fact args: (4)
::{ fact args: (3)
:::{ fact args: (2)
::::{ fact args: (1)
:::::{ fact args: (0)
:::::} fact result: 1
::::} fact result: 1
:::} fact result: 2
::} fact result: 6
:} fact result: 24
} fact result: 120