【问题标题】:How does Instruments collect data from iOS without DTrace being available?Instruments 如何在没有 DTrace 的情况下从 iOS 收集数据?
【发布时间】:2013-05-28 05:21:48
【问题描述】:
我正在尝试了解 XCode 仪器的内部工作原理。在 MacOS 上,它可以依靠 DTrace 收集各种分析数据。在 iOS 上,它也能做很多事情,但我反复读到 DTrace 还没有移植到 iOS。
那么它是如何工作的呢?
关于 DTrace 的 Apple 文档并没有告诉我太多关于这里的内部工作原理。然而,我注意到,当使用 Instruments 从 XCode 分析我自己的应用程序时,XCode 似乎以不同的方式构建它。这是否意味着它将一些独立的 DTrace 提供程序与我的代码相关联?
提前致谢!
/e:如果我能...
【问题讨论】:
标签:
ios
xcode-instruments
dtrace
【解决方案1】:
对于在模拟器中运行的 iOS 应用,显然模拟器是一个 Mac OS X 程序,因此它可以使用 DTrace 来监控模拟器所做的一切。
对于在 iPhone 上运行的 iOS 应用程序,我同意该文档对正在发生的事情提供的信息很少。它可能是将监视代码加载到 iOS 上的目标进程中(通过在编译时添加代码或在运行时将其链接),或者在 iOS 上针对目标进程运行“传统调试器”以实现跟踪。如果没有使用 DTrace 的内核级支持,那么这些几乎是唯一的选择。
我从未使用过 Instruments,但最让我惊讶的是,它们能够收集看似操作系统级别的 I/O 统计信息,而如果没有 DTrace,这通常是无法测量的。我不确定,因为我没有使用它,但这些统计信息可能只是跟踪来自易于检测的入口点的 I/O(即来自特定目标进程的 I/O 相关系统调用),或者有由操作系统发布的其他特定于 iOS 的统计数据源。例如,可以通过调用sysctl 从 Mac OS X 获取许多系统统计信息。根据实际收集的统计数据,Instruments 可能只是使用像这样的简单计数器来完成大部分工作。
如果您真的下定决心要找到答案,那么由 DTracing Instruments 自己解决这个问题将是一个有趣的 DTrace 挑战。祝你好运:-)