次のようなものを使用したい場合があります。
-module(test).
-compile(export_all).
foo(_LongBinary, _OtherParam) ->
ok.
test() ->
dbg:tracer(process, {
fun({trace, Pid, call, {M,F,A}}, _) ->
NewA = lists:map(fun(<<Reduced:5/binary, _/binary>>) ->
Reduced;
(Else) ->
Else
end, A),
erlang:display({Pid, "->", M, F, NewA});
({trace, Pid, return_from, {M,F,A}, R}, _) ->
erlang:display({Pid, "<-", M, F, A, R})
end, unused}),
dbg:p(all,c),
dbg:tpl(test, foo, x).
dbg:tracer
主に、 2 つの引数を取るの代替バージョンを使用しています。1 つ目はタイプで、プロセスまたはポートの可能性があります(詳細については、ドキュメントを参照してください)。2 番目のパラメーターは、各トレース メッセージに対して呼び出されるメッセージ ハンドラー関数 (実際には、ハンドラー関数と初期ハンドラー データを含むタプル) です。
そこでは、ロジックを実装して、特定の量よりも長いバイナリを切り捨てるか、その他必要なことを行うことができます。
したがって、次のようなものが得られます。
1> test:test().
{ok,[{matched,nonode@nohost,1},{saved,x}]}
2> test:foo(<<"aa">>,b).
ok
3> {<0.45.0>,"->",test,foo,[<<2 bytes>>,b]}
{<0.45.0>,"<-",test,foo,2,ok}
4> test:foo(<<"aaaaaaa">>,b).
ok
5> {<0.45.0>,"->",test,foo,[<<5 bytes>>,b]}
{<0.45.0>,"<-",test,foo,2,ok}
6> test:foo(<<"aaaaaaasdaaaaaaaaa">>,b).
ok
7> {<0.45.0>,"->",test,foo,[<<5 bytes>>,b]}
{<0.45.0>,"<-",test,foo,2,ok}
戻り値も切り捨てることができます。dbg モジュールを調べて、きれいな印刷をエミュレートすることもできます (残念ながら、フォーマット関数はそこでエクスポートされません)。