Next: The Outside Context, Previous: Trace Buffer, Up: Edebug [Contents][Index]
Edebugは基本的なカバレッジテスト(coverage test)と実行頻度(execution frequency)の表示を提供します。
カバレッジテストは、すべての式の結果と以前の結果を比較することにより機能します。プログラム内のフォームがそれぞれ、カレントEmacsセッション内でカバレッジテストを開始して以降に、2つの異なる値をリターンした場合、それらのフォームは“カバー”されたと判断します。したがって、プログラムにカバレッジテストを行なうには、そのプログラムをさまざまなコンディション下で実行して、プログラムが正しく振る舞うかに注目します。異なるコンディション下で十分にテストして、すべてのフォームが異なる2つの値をリターンしたとき、Edebugはそのことを告げるでしょう。
カバレッジテストにより実行速度が低下するので、edebug-test-coverage
が非nil
のときだけカバレッジテストが行なわれます。頻度計数(frequency
count)は、たとえ実行モードがGo-nonstopでも、カバレッジテストが有効か無効かに関わらず、すべての式にたいして処理されます。
定義にたいするカバレッジ情報と頻度数の両方を表示するには、C-x X
=(edebug-display-freq-count
)を使用する。単に=(edebug-temp-display-freq-count
)とすると、他のキーをタイプするまでの間だけ、同様な情報を一時的に表示する。
このコマンドは、カレント定義の各行の頻度数を表示する。
このコマンドは、コードの各行の下にコメント行として頻度数を挿入する。1回のundo
コマンドで、すべての挿入をアンドゥできる。頻度数は式の前の‘(’、または式の後の‘)’、または変数の最後の文字の下に表示される。表示をシンプルにするために、同一行にたいして式の以前頻度数と頻度数が同じ場合は表示しない。
ある式にたいする頻度数の後に文字‘=’がある場合、それはその式が評価されるたびに毎回同じ値をリターンしていることを表す。他の言い方をすると、カバレッジテストの目的からは、その式はまだ“カバー”されていないということである。
ある定義にたいして頻度数とカバレッジデータを明確にするには、単にeval-defun
で再インストルメントすればよい。
たとえば、ソースのbreakpointで(fac
5)
を評価した後、edebug-test-coverage
をt
にセットすると、breakpointに達したときの頻度データは以下のようになります:
(defun fac (n) (if (= n 0) (edebug)) ;#6 1 = =5 (if (< 0 n) ;#5 = (* n (fac (1- n))) ;# 5 0 1)) ;# 0
コメント行は、fac
が6回呼び出されたことを表しています。最初のif
命令は毎回同じ結果を5回リターンしています。同じ結果という意味では、2つ目のif
の条件にも当てはまります。fac
の再帰呼び出しは、結局リターンしません。