我试图将所有调用记录到dbg
进行调试(感谢this答案)。下面的代码:使用`dbg`跟踪函数时,仅记录调用跟踪中的特定参数?
-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个参数?
打印第二个参数+第三个参数的前几个字节,或者只是在打印之前通过自定义函数传递第三个参数?
你有没有试过我的建议与redbug,或者你是否真的需要DBG? –
@ marco.m对不起,我没有机会更新你。我真的想要一个解决方案而不添加任何新的依赖关系。感谢您发布的视频,我潜入了redbug和dbg的实现中,并编写了一个小函数,它使用tracer API来执行我想要的操作。我会尽快在这里发布解决方案。 – Dogbert