优胜美地系统红宝石上缺少 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 探针的主要内容,如果未能解决你的问题,请参考以下文章