【发布时间】:2016-11-30 11:54:03
【问题描述】:
我正在尝试使用dbg 记录对函数的所有调用以进行调试(感谢this 的回答)。代码如下:
-module(a).
-export([main/0]).
trace_me(_, _, _) ->
ok.
main() ->
dbg:start(),
dbg:tracer(),
dbg:tpl(a, trace_me, 3, []),
dbg:p(all, c),
LargeBinary = binary:copy(<<"foo">>, 10000),
trace_me(foo, bar, LargeBinary).
问题是其中一个参数是一个非常大的二进制文件,上面的代码在每次调用时都会打印完整的二进制文件:
1> c(a).
{ok,a}
2> a:main().
(<0.57.0>) call a:trace_me(foo,bar,<<"foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoo...lots of foos omitted...">>)
ok
是否可以(不修改trace_me/3):
每次调用只打印前 2 个参数?
打印前 2 个参数 + 第三个参数的前几个字节,还是在打印前通过自定义函数传递第三个参数?
【问题讨论】:
-
你用 redbug 试过我的建议了吗,还是你真的需要 dbg?
-
@marco.m 抱歉,我没有机会更新您的信息。我真的想要一个不添加任何新依赖项的解决方案。感谢您发布的视频,我深入研究了 redbug 和 dbg 的实现,并编写了一个小函数,它使用跟踪器 API 来做我想做的事。我会尽快在此处发布解决方案。
标签: erlang