我正在使用dtrace看到意想不到的结果,因为我的-entry和-return结果似乎并不总是相关的,我似乎看到了太多或太少,并且简化了我的脚本,以探索出了什么问题。
我试图使用以下D脚本来分析在require "./foo"代码中花费在中的时间:
ruby*:::require-entry
{
self->start = timestamp;
@counts["require-entry"] = count();
}
ruby*:::require-return
/self->start/
{
@counts["correlated require returns"] = count();
self->start = 0;
}
ruby*:::require-return
/!self->start/
{
/* @reqTimes[copyinstr(arg0)] = quantize(self->start - timestamp); */
@counts["uncorrelated require returns"] = count();
}运行此打印:
$ time sudo dtrace -q -s script.d -c './script.rb'
correlated require returns 5691
uncorrelated require returns 7872
require-entry 7877
sudo dtrace -q -s script.d -c './script.rb' 0.22s user 0.22s system 3% cpu 13.488 totalself->变量(相对于this->或类似的)?发布于 2019-06-11 20:27:53
我是否正确地使用了自>变量?
可能不会。因为第三个子句将始终运行(self->start=0)。这就是问题所在。
如果您有足够的最近(dtrace -V≥dtrace: Sun D 1.14) dtrace版本,您可以这样做
ruby*:::require-return
{
if (self->start)
@counts["correlated require returns"] = count();
else
@counts["uncorrelated require returns"] = count();
self->start = 0;
}否则
ruby*:::require-return
{
@counts[self->start ? "correlated require returns" : "uncorrelated require returns"] = count();
self->start = 0;
}也能做到这一点。
https://stackoverflow.com/questions/55493115
复制相似问题