Daysこの広告は、90日以上更新していないブログに表示しています。今回はtools.traceについてです。tools.traceは実行トレースをとるのに便利な関数/マクロを提供するライブラリです。標準でデバッグ機能が弱いClojure上での開発で,シンプルに関数呼び出しだけトレースしたいような場合に使えます。"0.7.6"]と追加するだけで使えます。2013年12月現在では,0.7.6が最新の安定版です。基本的には,tools.traceは開発時に使用するライブラリなので,:devプロファイルの:dependenciesとして追加するのがいいでしょう。使い方tools.traceが提供する主な関数/マクロは以下です。vs)トレースする関数の名前を指定すると,その関数のVarが束縛する値をトレース出力つきの関数に置き換えます。vs)trace-varsで置き換えた関数を元に戻すことができます。value)関数呼び出し以外にトレース結果として出力したい値がある場合に使用します。以下のマクロについては,使用する場合に注意するか,使用しない方がよいでしょう。dotraceマクロのボディ内だけ関数をトレース出力つきの関数に動的束縛する関数です。^:dynamicとして定義されたVar以外には適用できません。これは,1.3以降でVarがデフォルトで:dynamicでなくなったことに依ります。trace-forms引数に与えた式のあらゆるサブフォームに対して,トレース出力を行う式を挿入します。コードウォークの実装が雑なため,引数に与える式によっては式の挿入に失敗します。trace-ns引数に与えた名前空間で定義されたすべての関数に対してtrace-varsを適用し,トレース出力つきの関数に置き換えます。マップやセットなどclojure.lang.IFnインタフェースを実装した値を関数と誤判定し,トレース出力つきの関数に置き換えるため,トップレベルにマップやセットの定義がある場合に問題になることがあります。以下のようなプログラムを対象にトレース出力の結果を見てみましょう。x))))以下がtools.traceの適用例です。おわりに今回は,シンプルなデバッグツールとしてtools.traceを紹介しました。今回この記事を書くにあたって改めてtools.traceのコードを確認してみて,実装のやや甘い部分が散見されました。適用例で示したような使い方をする範囲では便利に使うことができますが,その他の機能を使用する場合には十分に注意が必要です。今後,tools.trace自体の完成度が上がること,また,別の高機能なトレースツールが現れることが期待されます。次回は,引き続き僕athosがcore.matchについて書きます。4はてなブログをはじめよう!athosさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。