首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相关dtrace探针

相关dtrace探针
EN

Stack Overflow用户
提问于 2019-04-03 10:37:06
回答 1查看 59关注 0票数 1

我正在使用dtrace看到意想不到的结果,因为我的-entry-return结果似乎并不总是相关的,我似乎看到了太多或太少,并且简化了我的脚本,以探索出了什么问题。

我试图使用以下D脚本来分析在require "./foo"代码中花费在中的时间:

代码语言:javascript
复制
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();
}

运行此打印:

代码语言:javascript
复制
$ 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->或类似的)?
  • 我的谓词正确吗?
  • 当以这种方式运行dtrace时,我是否在脚本启动之前与激活的探针进行“竞赛”?
EN

回答 1

Stack Overflow用户

发布于 2019-06-11 20:27:53

我是否正确地使用了自>变量?

可能不会。因为第三个子句将始终运行(self->start=0)。这就是问题所在。

如果您有足够的最近(dtrace -Vdtrace: Sun D 1.14) dtrace版本,您可以这样做

代码语言:javascript
复制
ruby*:::require-return
{
  if (self->start)
    @counts["correlated require returns"] = count();
  else
    @counts["uncorrelated require returns"] = count();

  self->start = 0;
}

否则

代码语言:javascript
复制
ruby*:::require-return
{
  @counts[self->start ? "correlated require returns" : "uncorrelated require returns"] = count();
  self->start = 0;
}

也能做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55493115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档