Edebugは、簡易的なカバレッジテストと実行頻度の表示機能を提供します。
カバレッジテストは、各式の結果を直前の結果と比較することで行われます。現在のEmacsセッションでカバレッジテストを開始して以来、各フォームが2つの異なる値を返した場合、そのフォームはカバレッジ済みとみなされます。したがって、プログラムのカバレッジテストを行うには、さまざまな条件下でプログラムを実行し、正しく動作するかどうかを確認してください。十分な数の異なる条件を試し、各フォームが2つの異なる値を返すようになった時点で、Edebugが通知します。
カバレッジテストは実行速度を低下させるため、edebug-test-coverage が nil でない場合にのみ実行されます(Edebug Options を参照)。頻度カウントは、実行モードが Go-nonstop
である場合や、カバレッジテストが有効であるかどうかにかかわらず、インストルメンテーション対象関数のすべての実行に対して行われます。
定義のカバレッジ情報と出現回数の両方を表示するには、C-x X = (edebug-display-freq-count) を使用してください。= (edebug-temp-display-freq-count)
では、別のキーを入力するまでの間だけ、同じ情報が一時的に表示されます。
このコマンドは、現在の定義の各行の周波数カウントデータを表示します。
コードの各行の後に、コメント行として出現回数が挿入されます。undo
コマンドを1回実行することで、すべての挿入を取り消すことができます。出現回数は、式の前の ‘(’ 、式の後の ‘)’
、または変数の最後の文字に表示されます。表示を簡素化するため、同じ行にある先行する式の出現回数と一致する場合は、カウントは表示されません。
式のカウントに続く文字 ‘=’ は、その式が評価されるたびに同じ値を返してきたことを示します。言い換えれば、カバレッジテストの対象にはまだなっていないということです。
定義の周波数カウントとカバレッジデータをクリアするには、単に eval-defun
で再計測してください。
例えば、ソースブレークポイントで(fac 5)を評価し、edebug-test-coverageをtに設定した後、ブレークポイントに到達すると、周波数データは次のようになります。
(defun fac (n)
(if (= n 0) (edebug))
;#6 1 = =5
(if (< 0 n)
;#5 =
(* n (fac (1- n)))
;# 5 0
1))
a;# 0
コメント行から、fac が 6 回呼び出されたことがわかります。最初の if 文は 5 回返り、その都度同じ結果となりました。2 番目の if の条件についても同様です。fac
の再帰呼び出しは、一度も返りませんでした。