我想使用dbg:tracer跟踪Erlang GC的所有行为并打印出跟踪事件。
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 :(得分: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/2
,my_module:function/1
和dbg:stop/0
调用全部包含在一个函数中将意味着每个函数将在它之前的函数之后立即执行。我最初从这个答案的最后部分得到了一些想法,它需要在一定数量的事件https://stackoverflow.com/a/1954980/1245380之后自动停止跟踪。