recon_trace の使い方
このドキュメントは
http://ferd.github.io/recon/recon_trace.html の基礎的な部分を自分がわかるようにまとめたもの.
recon_trace とは
単一 Erlang Node 内でトレース (関数呼び出し) を行うモジュール.
安全?らしい.安全ってなによ.
基本的な使い方
recon_trace:calls({queue, new, '_'}, 1).
queue:new(...) の呼び出しを 1 回だけトレースして出力する.
recon_trace:calls({queue, in, 2}, {10, 100}).
queue:in/2 の呼び出しを 10回 / 100ms までだけトレースして出力する.
一度でもこのレートを飛び出すと Recon tracer rate limit tripped.
が返されトレースは終了してしまう.
recon_trace:calls({queue, in, Fun}, 1).
queue:in(...) の呼び出しのうち arity が Fun と同じものを 1 回だけトレースして Fun を実行する.正確には, Fun の arity は 1 で,トレース対象の関数の引数のリストを受け取る.
つまり,queue:in/2 のみトレースしたいならこう.
recon_trace:calls({queue, in, fun([_,_]) -> ok end}, 1).
Fun にガード式をつけて特定の場合のみトレースすることも可能.
上記例では,呼び出された関数の MFA しか出力されず,その関数がどんな値を返したかが取得できない.
欲しいよね.できます.
recon_trace:calls({queue, in, fun(_) -> return_trace() end}, 1).
Fun の部分で return_trace() を呼ぶと出力される.呼べばいいだけなので, fun(_) -> return_trace(), ok end
としても出力される.
途中でトレースをやめたい場合.
recon_trace:clear().