我目前正在观察Erlang程序的痕迹(使用 Erlang:trace 函数),特别是YAWS Web服务器,尽管我的问题可能不仅限于此特定程序。
基本上,当我尝试跟踪某些进程并输出这些跟踪时,会显示以下错误:
=错误报告==== 2014年3月30日:: 15:48:25 === 无法打开跟踪"跟踪。< 0.4084.0> .traffic":" I / O错误"
=错误报告==== 2014年3月30日:: 15:48:25 === 无法打开跟踪"跟踪。< 0.4085.0> .traffic":" I / O错误"
=错误报告==== 2014年3月30日:: 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)
,将执行函数yaws_server:acceptor
的进程的PID作为参数传递。
首先,正确打印跟踪,但随后此过程终止并生成功能yaws_server:acceptor
的新进程,之后仅显示错误消息。
答案 0 :(得分:3)
我认为您可能会混淆Erlang tracing以及Yaws为HTTP请求提供的跟踪功能。它们是非常不同的东西。
您看到的错误是由于Yaws无法打开错误消息中提到的文件(例如trace.<0.4084.0>.traffic
),默认情况下会在logdir
中指定的文件中打开yaws.conf
个文件。您可以在yaws.conf documentation顶部或Yaws安装的yaws.conf.5
手册页中阅读有关此内容的更多信息。
答案 1 :(得分:1)
编辑后:
我完全同意Steve Vinoski的回答。
很少注意到:
loop/0
函数如果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
可能不存在(或者您可能忘记添加允许创建文件夹的标志),或者您可能没有权限在此目录中写入。