2012-03-15 39 views
0

使用dbg跟蹤我的模塊時,遇到了如何收集產生,退出,註冊,取消註冊,鏈接,取消鏈接,取得鏈接,取得關聯等消息的問題erlang允許使用trace,但僅限於那些直接從我的模塊中產生的進程? 作爲一個例子,我不需要知道io模塊創建哪些進程,當我調用io:某些模塊函數的格式時。有人知道如何解決這個問題嗎?Erlang跟蹤(僅從我的模塊進程中收集數據)

+0

這可能有助於..http://stackoverflow.com/questions/9275814/erlang-receiving-timeout-messages-when-calling-ioformat – aseychell 2012-03-15 14:30:50

回答

0

簡短的回答:

一種方法是看呼叫消息之後產卵消息。

龍答:

我不是DBG的專家。其原因是,我一直在使用的(恕我直言更好,更安全,甚至更加便利)替代:,從https://gist.github.com/gebi/jungerl/tree/master/lib/pan

的API進行了總結in the html doc

隨着鍋:啓動可以跟蹤指定接收所有跟蹤消息回調模塊。然後你的回叫模塊可以處理它們,例如跟蹤ETS中的流程或傳遞給每個調用的狀態數據。 跟蹤消息的格式在pan:scan中指定。

有關回調模塊的示例,您可以查看src/cb _ *。erl

現在你的問題: 隨着你可以跟蹤工藝處理和呼叫你的favourit模塊像這樣:

pan:start({ip, CallbackModule}, Node, all, [procs,call], {Module}). 

其中module是您的模塊的名稱(在這種情況下:sptest ) 然後回調模塊(在這種情況下:cb_write)可以看看產卵遵循相同的過程內的呼叫消息消息,例如:

32  - {call,{<6761.194.0>,{'fun',{shell,<node>}}},{sptest,run,[[97,97,97]]},{1332,247999,200771}} 
33  - {spawn,{<6761.194.0>,{'fun',{shell,<node>}}},{{<6761.197.0>,{io,fwrite,2}},{io,fwrite,[[77,101,115,115,97,103,101,58,32,126,115,126,110],[[97,97,97]]]}},{1332,247999,200805}} 

作爲也使用相同的回溯端爲DBG,跟蹤消息(以及信息)能夠被使用Erlang的跟蹤BIF-S以及收集,但安全得多。