yosemite 系统 ruby 上缺少 dtrace 探测器

dtrace probes missing on yosemite system ruby

在全新的 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 安装 ruby 也无济于事) 和 --enable-dtrace.

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

无论如何,appart 从那个 dtrace 工作正常。

$ dtrace -V
dtrace: Sun D 1.12.1

想法?

我认为这里有几件事在起作用。我认为没有 ruby 提供商(不再)。 Ruby 探测仅在您 运行 或具有 运行ning 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 也是我用来创建示例探针列表的那个。