我使用dtrace看到了意外的结果,因为我的-entry
和-return
的结果似乎并不总是相关的,我似乎看到太多或太少,并且简化了我的脚本来探究出了什么问题。
我正在尝试使用以下D脚本来分析我的Ruby代码在require "./foo"
s中花费的时间:
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 total
self->
变量(与this->
或类似的变量相比)答案 0 :(得分:0)
我正确使用了self->变量
可能不是。因为第三个子句将始终运行(for idx, number, en in iter(lambda en=enumerate(range(1, 10)): (*next(en), en), 0):
print(en, idx, number)
)。就是这个问题。
如果您的dtrace版本足够新(<enumerate object at 0x7f74a11b7a68> 0 1
<enumerate object at 0x7f74a11b7a68> 1 2
<enumerate object at 0x7f74a11b7a68> 2 3
<enumerate object at 0x7f74a11b7a68> 3 4
<enumerate object at 0x7f74a11b7a68> 4 5
<enumerate object at 0x7f74a11b7a68> 5 6
<enumerate object at 0x7f74a11b7a68> 6 7
<enumerate object at 0x7f74a11b7a68> 7 8
<enumerate object at 0x7f74a11b7a68> 8 9
≥self->start=0
),则可以
dtrace -V
否则
dtrace: Sun D 1.14
也可以解决问题。