2014-03-30 176 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可能不存在(或者您可能忘记添加允许创建文件夹的标志),或者您可能没有权限写入此目录。