优胜美地系统红宝石上缺少 dtrace 探针

Posted

技术标签:

【中文标题】优胜美地系统红宝石上缺少 dtrace 探针【英文标题】:dtrace probes missing on yosemite system ruby 【发布时间】:2015-03-23 22:04:38 【问题描述】:

在新的 yosemite 安装(您可以从 mac 商店下载的那个)上,似乎缺少 ruby​​ dtrace 提供程序:

$ sudo dtrace -l -P ruby
   ID   PROVIDER            MODULE                          FUNCTION NAME
dtrace: failed to match ruby:::: No probe matches description

下载/安装 Xcode 6.2 6C131e + CLT 无济于事,使用 (rbenv|ruby-build|rvm|ruby-install) 和 --enable-dtrace 安装 ruby​​ 也无济于事。

我被困住了。如何安装缺少的 ruby​​.usdt ?我真的很想将 dtrace 与 ruby​​ 一起使用。

无论如何,该 dtrace 的 appart 工作正常。

$ dtrace -V
dtrace: Sun D 1.12.1

想法?

【问题讨论】:

【参考方案1】:

我认为这里有几件事在起作用。我不认为有红宝石提供者(不再)。 Ruby 探针仅在您运行或正在运行 ruby​​ 进程时可用。例如:

sudo dtrace  -c 'ruby -v' -l -m ruby

在我的系统上创建以下输出:

   ID   PROVIDER            MODULE                          FUNCTION NAME
315346  ruby85332              ruby                   empty_ary_alloc array-create
315347  ruby85332              ruby                           ary_new array-create
315348  ruby85332              ruby                     vm_call_cfunc cmethod-entry
315349  ruby85332              ruby                     vm_call0_body cmethod-entry
315350  ruby85332              ruby                      vm_exec_core cmethod-entry

请注意,提供程序是“ruby85332”,其中“85332”是进程 ID。因此,每个 ruby​​ 进程都有不同的提供程序。

关于rvm,默认启用dtrace。所以--enable-dtrace

`rvm install ruby-2.0.0 --enable-dtrace`

真的不需要。另一方面,如果您在dtrace 需要root/sudo 权限的机器上工作,dtrace 探针仍然不会编译,因为编译过程无法调用dtrace

我个人在dtrace 可执行文件上设置了SUID 标志。在我的世界里,这应该可以工作,我确实可以在编译日志中看到安装过程试图编译 dtrace 探针。但是,构建仍然失败,并出现有关“dev/fd”的一些错误。对我有用的是通过rvm mount 使用 ruby​​ vm 的预编译版本。例如:

rvm mount -r https://rvm.io/binaries/osx/10.10/x86_64/ruby-2.0.0-p451.tar.bz2

通过上述命令安装的 ruby​​ 也是我用来创建示例探针列表的那个。

【讨论】:

以上是关于优胜美地系统红宝石上缺少 dtrace 探针的主要内容,如果未能解决你的问题,请参考以下文章

使用单个提供程序名称为插件创建 dtrace 探针

请问dtrace启用了哪些探针?

如何在 SmartOS 上使用 HotSpot DTrace 探针?

DTrace END 探针从不触发

DTrace - 如何在返回探针中正确检索初始参数

如何在 Mac OS X Leopard 上的 dtrace 中使用热点探针?