你可能想使用這樣的事:
-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
的替代版本,其中有兩個參數。首先是類型,可能是進程或端口(有關更多詳細信息,請參閱doc)。第二個參數是消息處理函數(實際上是一個包含處理函數和初始處理程序數據的元組),將爲每個跟蹤消息調用它。
在那裏,你可以實現你的邏輯來截斷長於一定數量的二進制文件,或者你需要做的任何事情。
所以,你會得到這樣的:
1> test:test().
{ok,[{matched,[email protected],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模塊來模擬他們漂亮的打印(不幸的是,格式化函數沒有被導出)。