使用mocha时getaddrinfo无法解析主机文件中的地址 Node.js 0.10.26 OSX10.9.2(也在ubuntu漫游框上)

使用mocha时getaddrinfo无法解析主机文件中的地址 Node.js 0.10.26 OSX10.9.2(也在ubuntu漫游框上),node.js,mocha.js,dtrace,getaddrinfo,Node.js,Mocha.js,Dtrace,Getaddrinfo,在我的系统上的两个不同模块中,当我使用mocha运行测试时,出现以下错误: {[Error:getaddrinfo ENOTFOUND]code:'ENOTFOUND',errno:'ENOTFOUND',syscall:'getaddrinfo'} 这通常意味着我试图解析一个不存在的主机。我尝试使用dtrace发现此脚本中的问题(我发现并稍微修改了此脚本): #/usr/sbin/dtrace-s #pragma D选项安静 dtrace:::开始 { printf(“%-20s%-12s%s

在我的系统上的两个不同模块中,当我使用mocha运行测试时,出现以下错误:

{[Error:getaddrinfo ENOTFOUND]code:'ENOTFOUND',errno:'ENOTFOUND',syscall:'getaddrinfo'}

这通常意味着我试图解析一个不存在的主机。我尝试使用dtrace发现此脚本中的问题(我发现并稍微修改了此脚本):

#/usr/sbin/dtrace-s
#pragma D选项安静
dtrace:::开始
{
printf(“%-20s%-12s%s\n”、“时间”、“延迟(毫秒)”、“主机”);
}
pid$target::getaddrinfo:条目
{
self->host=copyinstr(arg0);
self->start=时间戳;
}
pid$target::getaddrinfo:返回
/自->启动/
{
printf(“%d”,arg1);
此->增量=(时间戳-自->开始)/1000000;
printf(“%-20Y%-12d%s\n”,walltimestamp,this->delta,self->host);
self->host=0;
自->启动=0;
}
使用这个,我可以看到每个被我的测试击中的主机要么在我的主机文件中,要么是我的主机名。
printf(“%d”,arg1)打印(I)函数的返回值。不幸的是,我看到的返回值是一些大数字,而不是
0
-1

因此,我的dtrace脚本可能有问题,但这并不能解释我更大的问题:

当我的主机文件包含
127.0.0.1数据代理时,为什么主机
数据代理
未解析?为什么这只发生在我使用mocha运行测试时,而不是在我运行服务并手动点击它们时


如果您想查看获取错误的相关node.js代码,请检查mongodb并请求,因为我的用法与它们的示例类似。

尝试在int中强制转换arg1

printf("%d\n", (int) arg1);

这是我最近发现的一个问题,它可能解释了为什么你得到了非常大的数字。IIRC,这是因为在内核中,arg0arg12存储在uint64\t中。我不记得在libdtrace中有一个代码路径来实际执行转换。

arg1的大量出现是由于。
如果可能的话,您可以检查getaddrinfo源代码(如果没有,请使用
gdb
工具的
反汇编
命令),您会发现getaddrinfo可能会调用其他函数。

看起来可能是您忘了关闭某些文件句柄。检查:我试过了,但仍然得到奇怪的结果。这些arg的值似乎取决于我打印的数量:arg0 arg1 arg2给出的值与arg0 arg1不同。你知道我可以读些什么来了解更多的信息吗?下面是我正在尝试的一个例子