Возможно, вы захотите использовать что-то вроде этого:
-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
, которая принимает два аргумента. Первым является тип и может быть process или port (более подробную информацию см. В документе). Второй параметр - это функция обработчика сообщений (фактически, кортеж, содержащий функцию обработчика и начальные данные обработчика), которая будет вызываться для каждого сообщения трассировки.
Там вы можете реализовать свою логику для усечения двоичных файлов более длинных, чем определенное количество или все, что вам нужно сделать.
Итак, вы получите что-то вроде:
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, чтобы эмулировать их красивую печать (к сожалению, функции форматирования там не экспортируются).