2014-03-30 239 views
0

我目前正在觀察Erlang程序的痕跡(使用Erlang:跟蹤函數),特別是YAWS Web服務器,儘管我的問題可能不限於此特定程序。Erlang跟蹤:無法打開跟蹤

基本上,當我試圖跟蹤某些過程和輸出這些痕跡,則顯示以下錯誤:

=錯誤報告==== 30-MAR-2014 :: 15:48:25 == = 無法打開跟蹤 「跟蹤< 0.4084.0> .traffic。」: 「I/O錯誤」

=錯誤報告==== 30-MAR-2014 :: 15:48:25 = == 未能打開跟蹤「跟蹤」< 0.4085.0> .traffic「:」I/O錯誤「

=錯誤報告==== 30-Mar-2014 :: 15:48:26 === 無法打開跟蹤「跟蹤」。 < 0.4086.0> .traffic「: 」I/O錯誤「

我將不勝感激任何瞭解爲什麼這個錯誤發生,以及如何可以解決

感謝

編輯。! 這是我使用的代碼:

looper()-> 
    receive 
     P-> io:format(" trace msg: ~p ~n", [P]) 
    end, 
    looper(). 

tracer2(Pid)-> 
    erlang:trace(Pid,true,[set_on_spawn, send, 'receive']), 
    looper(). 

在cmd,我第一輸入:ybed_sup:start_link(),然後輸入tracer2(PID)傳遞進程的PID執行功能yaws_server:acceptor作爲參數。

首先,跡線被正確打印,但是這個過程將會消失,並且產生具有函數yaws_server:acceptor的新進程,之後只會顯示錯誤消息。

+0

如果我在erlang shell中做了更新中描述的內容,我根本沒有收到任何跟蹤消息。也許你編輯'ybed.erl'來添加流量跟蹤,或者類似的東西? –

+0

我編輯了'ybed.erl'以在全局conf中啓用流量跟蹤,然後運行您在更新中顯示的示例代碼,但仍無法重現問題。 –

回答

3

我想你可能會困惑Erlang tracing和Yaws爲HTTP請求提供的跟蹤功能。他們是非常不同的東西。

您所看到的錯誤是由雅司病導致無法開立在你的錯誤消息中提到的文件(例如,trace.<0.4084.0>.traffic),默認情況下在yaws.conf文件中指定的logdir被打開。您可以在yaws.conf documentation的頂部附近或在您的Yaws安裝中的yaws.conf.5手冊頁中閱讀更多信息。

+0

請檢查編輯 – numX

1

您的編輯:

我完全同意史蒂夫Vinoski答案。

幾點注意事項:

  • 與當前的邏輯你「凍結」你殼(CMD),你可能要催生一個loop/0功能
  • 一個新的進程,如果你只是想簡單地調試系統嘗試使用dbg module
  • 如果trace/2函數失敗,您將得到幾乎不同的錯誤消息;類似

    ** exception error: bad argument in function erlang:trace/3 called as erlang:trace(a,b,c)

    東西,所以你可以假設你的代碼寫的作品就好了

  • (據我理解你)你在追蹤過程是產卵雅司病受體;請確保您開啓跟蹤受體催生之前,或傳遞給你的trace2/1功能從yaws_server:acceptor

PID返回最後確保你的配置就可以了。根據您所描述的log_dir可能不存在(或者您可能忘記添加允許創建文件夾的標誌),或者您可能沒有權限寫入此目錄。