Erlang跟踪:无法打开跟踪

Erlang跟踪:无法打开跟踪,erlang,trace,yaws,Erlang,Trace,Yaws,我目前正在观察Erlang程序的跟踪(使用Erlang:trace函数),特别是YAWS web服务器,尽管我的问题可能不限于此特定程序 基本上,当我尝试跟踪某些进程并输出这些跟踪时,会显示以下错误: =错误报告===2014年3月30日::15:48:25=== 无法打开跟踪“trace..traffic”:“I/O错误” =错误报告===2014年3月30日::15:48:25=== 无法打开跟踪“trace..traffic”:“I/O错误” =错误报告===2014年3月30日::15:

我目前正在观察Erlang程序的跟踪(使用Erlang:trace函数),特别是YAWS web服务器,尽管我的问题可能不限于此特定程序

基本上,当我尝试跟踪某些进程并输出这些跟踪时,会显示以下错误:

=错误报告===2014年3月30日::15:48:25=== 无法打开跟踪“trace..traffic”:“I/O错误”

=错误报告===2014年3月30日::15:48:25=== 无法打开跟踪“trace..traffic”:“I/O错误”

=错误报告===2014年3月30日::15:48:26=== 无法打开跟踪“trace..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\u sup:start\u link()
,然后输入
tracer2(PID)
,将执行函数
yaws\u server:acceptor
的进程的PID作为参数传递


起初,跟踪打印正确,但随后该进程终止,并生成带有functon
yaws\u server:acceptor
的新进程,之后只显示错误消息

我认为您可能会感到困惑,Yaws为HTTP请求提供了跟踪功能。它们是非常不同的东西


您看到的错误是由于Yaws无法打开错误消息中提到的文件(例如,
trace..traffic
),默认情况下,这些文件在
Yaws.conf
文件中指定的
logdir
中打开。您可以在yaws.conf.5手册页顶部附近或yaws.conf.5手册页(yaws安装的一部分)中了解更多信息。

我认为您可能会感到困惑,yaws为HTTP请求提供了跟踪功能。它们是非常不同的东西

您看到的错误是由于Yaws无法打开错误消息中提到的文件(例如,
trace..traffic
),默认情况下,这些文件在
Yaws.conf
文件中指定的
logdir
中打开。您可以在yaws.conf.5手册页顶部附近或yaws.conf.5手册页(yaws安装的一部分)中了解更多信息。

编辑后:

我完全同意史蒂夫·维诺斯基的回答

几点注意:

  • 使用当前逻辑“冻结”shell(cmd),您可能希望为
    循环/0
    函数生成一个新进程
  • 如果您只是想简单地调试您的系统,请尝试使用
  • 如果trace/2功能失败,您将得到几乎不同的错误消息;类似于

    **异常错误:参数错误
    在函数erlang:trace/3中
    称为erlang:trace(a、b、c)

    所以您可以假设您编写的代码工作正常

  • (据我所知)您正在跟踪生成yaws acceptor的进程;确保在生成接受程序之前打开跟踪,或将从yaws_服务器返回的函数pid传递给您的
    trace2/1

最后确保您的配置是正确的。根据您描述的内容,您的
日志目录可能不存在(或者您可能忘记添加允许创建文件夹的标志),或者您可能没有在此目录中写入的权限。

编辑后:

我完全同意史蒂夫·维诺斯基的回答

几点注意:

  • 使用当前逻辑“冻结”shell(cmd),您可能希望为
    循环/0
    函数生成一个新进程
  • 如果您只是想简单地调试您的系统,请尝试使用
  • 如果trace/2功能失败,您将得到几乎不同的错误消息;类似于

    **异常错误:参数错误
    在函数erlang:trace/3中
    称为erlang:trace(a、b、c)

    所以您可以假设您编写的代码工作正常

  • (据我所知)您正在跟踪生成yaws acceptor的进程;确保在生成接受程序之前打开跟踪,或将从yaws_服务器返回的函数pid传递给您的
    trace2/1


最后确保您的配置是正确的。从您描述的内容来看,您的
log\u dir
可能不存在(或者您可能忘记添加允许创建文件夹的标志),或者您可能没有在此目录中写入的权限。

如果我从erlang shell执行您在更新中描述的操作,我根本不会收到任何跟踪消息。也许您编辑了
ybed.erl
以添加流量跟踪,或者类似的东西?我编辑了
ybed.erl
以在全局配置中启用流量跟踪,然后运行您在更新中显示的示例代码,但仍然无法重现问题。如果我从erlang shell执行您在更新中描述的操作,我根本没有收到任何跟踪消息。也许您编辑了
ybed.erl
以添加流量跟踪,或者类似的内容?我编辑了
ybed.erl
以在全局配置中启用流量跟踪,然后运行了更新中显示的示例代码,但仍然无法重现问题。