2016-12-01 53 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後自動停止跟蹤。