recon_trace の話、は既に検索すると沢山出てくるのであんまり出てこなかった tips を。
recon_trace:calls
の戻り値は trace 対象となった関数の数が返るが、対象の関数が一つもなかった場合は 0 が返る。
typo もなく正しく与えたはずなのにうまく trace 対象とならない場合があり、その時は未ロードの場合に起きうる。
その時は Module:module_info(module)
とか叩くと強制的にロードされるので、その後に trace 出来るようになる。
trace 時に recon_trace:calls({M, F, fun(_) -> return_trace() end}, 10)
などすると、関数の呼び出し時 trace だけでなく、関数の戻り値も trace してくれるようになる。すると 2回 trace することになる。
recon_trace:calls([{ModuleA, F, 0}, {ModuleB, F, 0}], 10)
のようにする。
$ recon_trace:calls({ModuleA, F, 0}, 10).
$ recon_trace:calls({ModuleB, F, 0}, 10).
のようにしても ModuleB の trace しかされない。おそらく対象は trace の度にリセットされている。