我有以下程序。但是,在追蹤生成的進程時,我會看到一條帶有超時的跟蹤消息,如以下跟蹤中所示。Erlang - 調用io時接收超時消息:格式
start() ->
register(addone, spawn(addone, loop, [])).
loop() ->
receive
{request, Pid, Msg} ->
io:format("log ~n", []),
loop();
{stop, _Reason} ->
stop
end.
我執行這個過程具有以下功能:觀察
run() ->
addone:start(),
dbg:start(),
dbg:tracer(),
dbg:p(whereis(addone), [c,m]),
dbg:tpl({'_','_','_'},[{'_',['true'],[{'silent', 'false'}]}]),
addone:request(4).
跟蹤如下:
1> addone_scenarios:run().
log
(<0.32.0>) << {request,<0.30.0>,4}
(<0.32.0>) call io:format("log ~n",[])
(<0.32.0>) call io:default_output()
(<0.32.0>) call erlang:group_leader()
(<0.32.0>) call io:format(<0.23.0>,"log ~n",[])
(<0.32.0>) call io:o_request(<0.23.0>,{format,"log ~n",[]},format)
(<0.32.0>) call io:request(<0.23.0>,{format,"log ~n",[]})
(<0.32.0>) call io:io_request(<0.23.0>,{format,"log ~n",[]})
(<0.32.0>) call io:bc_req(<0.23.0>,{put_chars,unicode,io_lib,format,["log ~n",[]]},false)
(<0.32.0>) call net_kernel:dflag_unicode_io(<0.23.0>)
(<0.32.0>) call io:execute_request(<0.23.0>,{false,{put_chars,unicode,io_lib,format,["log ~n",[]]}})
(<0.32.0>) call erlang:monitor(process,<0.23.0>)
(<0.32.0>) <0.23.0> ! {io_request,<0.32.0>,<0.23.0>,
{put_chars,unicode,io_lib,format,["log ~n",[]]}}
(<0.32.0>) call io:wait_io_mon_reply(<0.23.0>,#Ref<0.0.0.29>)
(<0.32.0>) << {io_reply,<0.23.0>,ok}
(<0.32.0>) call erlang:demonitor(#Ref<0.0.0.29>)
(<0.32.0>) << timeout
(<0.32.0>) call addone:loop()
什麼奇怪的是,收到超時跟蹤消息。當我刪除io:format(...)
時,未收到此消息。有人可以指出什麼是可能的原因嗎?
編輯:我已更新跟蹤以包含所有功能的調用,也許它可能有所幫助。
我忽略這個跟蹤消息的問題是,我正在構建一個工具來分析程序的痕跡,並根據它收到的內容採取行動..所以我不能選擇哪些超時消息我可以忽略,哪些不是不幸的 – aseychell 2012-02-14 18:09:38