如何在 Mac OS X 上构建 DTrace?

Posted

技术标签:

【中文标题】如何在 Mac OS X 上构建 DTrace?【英文标题】:how do you build DTrace on Mac OS X? 【发布时间】:2010-02-02 18:58:54 【问题描述】:

我正在尝试在 Xcode 项目中使用 建议:

http://osx86.boeaja.info/2009/10/building-xnu-kernel-on-snow-leopard/

但我得到: libproc.m:24:49:错误:CoreSymbolication/CoreSymbolication.h:没有这样的 文件或目录

我意识到 CoreSymbolication 是一个私有框架,但 Apple 必须 让这个标头在某处可用,以便我构建 dtrace, 对?有人可以指出构建 dtrace 所需的文件吗?

【问题讨论】:

DTrace 内置于 Snow Leopard 的标准发布内核中。你到底想做什么? 我想从头开始构建它。我认为这是与开源 (CDDL) 软件包讨价还价的一部分,但也许 Apple 不必提供所有部件来实现这一点? 【参考方案1】:

您可能已经知道,Apple 只需发布从其他开源项目中获取的部分内核,并且不包括他们在内核之上构建的用户空间库。 CoreSymbolication/CoreSymbolication.h 听起来很像 Obj-C 的用户空间标头,因此您可以在没有它的情况下构建内核 DTrace 实用程序。 (虽然我很可能是错的。)

我猜它被用于用户空间dtrace(1m) 命令中的符号识别。如果有一个工具可以帮助我们解决这个问题... :-D

# dtrace -n 'pid$target:CoreSymbolication::entry ' -c 'dtrace -ln syscall::write:entry'
dtrace: description 'pid$target:CoreSymbolication::entry ' matched 246 probes
   ID   PROVIDER            MODULE                          FUNCTION NAME
  147    syscall                                               write entry
dtrace: pid 88089 has exited
CPU     ID                    FUNCTION:NAME
  2   6538 CSSymbolOwnerGetRegionWithName:entry 
  2   5014 CSSymbolOwnerForeachRegionWithName:entry 
  2   5078      CSRegionForeachSymbol:entry 
  2   6495 CSSymbolicatorGetSymbolOwnerWithUUIDAtTime:entry 
  2   6493 CSSymbolicatorForeachSymbolOwnerWithUUIDAtTime:entry 
  2   6494 CSSymbolicatorForeachSymbolOwnerWithCFUUIDBytesAtTime:entry 
  2   5048  CSSymbolOwnerGetDataFlags:entry 
  2   6538 CSSymbolOwnerGetRegionWithName:entry 
  2   5014 CSSymbolOwnerForeachRegionWithName:entry 
  2   5078      CSRegionForeachSymbol:entry 
  2   5092         CSSymbolIsExternal:entry 
  2   5092         CSSymbolIsExternal:entry
  ...

无论如何,dtrace 命令似乎正在使用该库。

【讨论】:

这里提供了逆向工程标头 - github.com/mountainstorm/CoreSymbolication(我自己没有尝试使用它们,所以不知道它们有多好)

以上是关于如何在 Mac OS X 上构建 DTrace?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Mac OS X 上通过 jinfo 启用 DTrace 探测

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

Mac OS X 上是不是有 dtrace ustack() 助手?

如何构建本机 Mac OS X 安装程序(在非 Mac 平台上)?

如何在 Mac OS X 主机上为 MIPS 目标构建 GCC 4.8.x

如何在 Mac OS X 上构建包含入口点的 C 程序?