Erlang跟踪:无法打开跟踪

时间:2014-03-30 14:25:43

标签: erlang tracing yaws

我目前正在观察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的新进程,之后仅显示错误消息。

2 个答案:

答案 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的回答。

很少注意到:

  • 以当前逻辑你&#34;冻结&#34;你shell(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可能不存在(或者您可能忘记添加允许创建文件夹的标志),或者您可能没有权限在此目录中写入。