Macro TRACE, UNTRACE

UP


Macro TRACE, UNTRACE

Macro TRACE, UNTRACE

構文

trace function-name* => trace-result
untrace function-name* => untrace-result

引数と戻り値

function-name - 関数名
trace-result - function-nameが与えられたときは実装依存。 与えられなかったときは関数名のリスト。
untrace-result - 実装依存

定義

traceuntraceは、トレース機能の呼び出しを制御します。

traceをひとつ以上のfunction-nameとともに呼び出したとき、 その関数は「トレースされた」ものになります。 トレースされた関数が呼び出されたときはいつでも、 呼び出しについての情報、渡された引数、最終的な返却値について、 トレース出力に印刷されます。 もしtracefunction-nameを指定せず使われたとき、 トレースの動作は行いませんが、 代わりに現在トレースされている関数のリストが返却されます。

untraceをひとつ以上のfunction-nameとともに呼び出したとき、 その関数は「トレースが解除された」ものになります (つまりもはやトレースされたものではありません)。 もしuntracefunction-nameを指定せず使われたとき、 現在トレースされている全ての関数のトレースが解除されます。

例文

(defun fact (n) (if (zerop n) 1 (* n (fact (- n 1)))))
=>  FACT
(trace fact)
=>  (FACT)
;; もちろんトレースの出力フォーマットは実装依存です。
 (fact 3)
>>  1 Enter FACT 3
>>  | 2 Enter FACT 2
>>  |   3 Enter FACT 1
>>  |   | 4 Enter FACT 0
>>  |   | 4 Exit FACT 1
>>  |   3 Exit FACT 1
>>  | 2 Exit FACT 2
>>  1 Exit FACT 6
=>  6

副作用

function-namesによる名前の関数定義が変更されるかもしれません。

影響

指定された関数名で定義されたものか、 すでにトレースされているものかのどちらか

例外

トレース指定が、すでにトレースされている関数であるときか、 あるいはトレースを解除した関数がトレースされていない関数のとき、 有害になる効果を生成するべきではありませんが、 しかし警告が発せられるかもしれません。

参考

*trace-output*, step

備考

traceuntraceは、 追加で実装依存の引数の形式を受け取るかもしれません。 そのトレース出力の形式は実装依存です。

traceは非標準のオプションを受け取れるように拡張することができますが、 実装はこの標準によって指定されたものでも 実装が拡張によって追加されたものでもない 構文かオプションが使われたときに 警告を発するように勧められます(ただし要求ではありません)。 なぜなら、それは誤字によるものであったり、 または今の実装ではない他の実装の中でサポートされている機能に 依存したものの可能性があるからです。


TOP, Github