2016-12-01 79 views
0

我想使用dbg:tracer跟踪Erlang GC的所有行为并打印出跟踪的事件。如何打印Erlang跟踪的所有数据dbg

1> dbg:tracer(). 
2> dbg:p(self(), [garbage_collection]). 
3> my_module:function([Args]). 
4> dbg:stop(). 
5> dbg:show_trace(). 
... 

我想my_module:function/0函数调用的执行过程中只有微量的垃圾收集。一旦函数返回跟踪应该停止。

+0

你能解释你所显示的命令的问题吗?什么都不打印?您还使用哪个版本的Erlang? – Stratus3D

+0

我知道我可以使用第2行跟踪Erlang GC,但实际上我想在第3行的执行过程中跟踪GC行为。我该怎么做? 第二个问题是停止跟踪过程后(第4行,我怎样才能打印出跟踪的数据? – fvarj

+0

fvarj让我知道我的答案是否解决了您的问题 – Stratus3D

回答

1

这样做可能有更好的方法,但我建议一旦你关心的功能返回就关闭跟踪。像这样的东西应该工作:

1> dbg:tracer(). 
2> GcOfMyModule = fun() -> 
    dbg:p(self(), [garbage_collection]), 
    my_module:function([Args]), 
    dbg:stop() 
end 
3> GcOfMyModule(). 
5> dbg:show_trace(). 

中包装dbg:p/2my_module:function/1,并dbg:stop/0都在同一个函数调用将意味着每个函数将收到的功能后立即执行。我最初从这个答案的最后部分得到了一个想法,它在一定数量的事件https://stackoverflow.com/a/1954980/1245380后自动停止跟踪。