LoginSignup
6
4

More than 5 years have passed since last update.

recon_trace の使い方

Last updated at Posted at 2016-07-25

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().
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4