试图读取Xcode Instruments .trace文件。 什么是.trace文件的文件格式?

我正在编写一个自动化的分析系统,在我的应用程序中分析不同的GPU密集屏幕。 我一直在尝试使用'XCode Instruments',用'OpenGL ES Driver'来捕获gpu的使用数据。

我的自动化系统从运行App的命令行运行Xcode Instruments,configuration文件并捕获数据,并将数据写入“.trace”文件。

我现在希望能够打开跟踪文件,并使用我的自动分析系统读取跟踪数据,以便我可以通知应用程序开发人员应用程序的各个部分如何执行。

我不能find任何方式来阅读跟踪文件。 它似乎是包含各种目录的包,并埋在那里有一个.zip文件,似乎包含一些二进制数据。 这个文件中的数据是如何分析的?

仪器系统似乎相当复杂,我很惊讶,它是多么难以访问它产生的跟踪数据。

有谁知道如何parsing跟踪文件?

我目前正在使用XCode 4.6.1

好吧,回答主要问题:.zip压缩文件中的数据是用NSArchiver类序列化的一组数据(用hex工具打开时,它们有一个相当不同的头文件),所以那是第一个线索)。 读起来相当简单,你只需要打电话给NSUnarchiver ,至less这是理论。 在深入细节之前,下面是一个非常简单的示例应用程序,其中包含一些信息: https : //github.com/JustSid/Traced

所以, NSArchiverNSUnarchiver的问题是,首先你需要拥有所有归档的类,其次你必须按照归档的顺序读取数据(这是棘手的我用class-dump来转储一些所需的类的接口,然后试图通过对象unarchive数据对象,看看我得到的东西。幸运的是, NSArchiver死亡与描述性的错误信息,如果有一个类错过了,它会告诉你它的名字是什么)。 我遇到的最大问题是Instruments二进制文件和使用的框架不包含我需要的所有类,特别是归档包含名为XRVideoCardRun的类的序列化数据。 我有一个假设.trace包内的.template文件包含一个dynamic库与所需的类(我的意思是,它的大小超过300kb,并包含很多blob(这是btw一个二元plist))。 我懒得从中提取二进制数据,并运行class-dump ,幸运的是大部分来自存档的数据与我期望看到的超类XRRun (我在一个Instruments框架中find的),除了包含字典的数组外,其内容看起来像是样本数据。

所以,其余的只是把所有的东西结合在一起。 如果你看看示例应用程序,最有趣的部分应该是XRRun.m.h文件。 它们包含一些文档,还有一些关于如何从样本中提取数据的部分,尽pipe您可能想用您自己的逻辑来replace它们。 希望能帮助到你。

应用程序抛出您的示例文件输出:

 Run 1, starting at 24.05.13 17:42:16, running until 24.05.13 17:42:28 Sample 0: FPS: 27 Device: 0% Renderer: 0% Tiler: 0% Timestamp: 1.012740 Sample 1: FPS: 35 Device: 11% Renderer: 10% Tiler: 2% Timestamp: 2.018574 Sample 2: FPS: 34 Device: 33% Renderer: 32% Tiler: 7% Timestamp: 3.026101 Sample 3: FPS: 59 Device: 59% Renderer: 59% Tiler: 16% Timestamp: 4.032030 Sample 4: FPS: 60 Device: 59% Renderer: 58% Tiler: 16% Timestamp: 5.038990 Sample 5: FPS: 59 Device: 59% Renderer: 58% Tiler: 16% Timestamp: 6.046022 Sample 6: FPS: 59 Device: 57% Renderer: 53% Tiler: 17% Timestamp: 7.051187 Sample 7: FPS: 60 Device: 67% Renderer: 66% Tiler: 14% Timestamp: 8.057343 Sample 8: FPS: 59 Device: 64% Renderer: 64% Tiler: 11% Timestamp: 9.064914 Sample 9: FPS: 60 Device: 67% Renderer: 67% Tiler: 11% Timestamp: 10.072592 Sample 10: FPS: 59 Device: 65% Renderer: 65% Tiler: 15% Timestamp: 11.080248 

(PS:如果格式改变,应用程序也会中断…)

我正在尝试使用Instruments自带的未logging框架来parsing.trace文档。 现在它正在和Time Profiler一起工作,并且使其与其他仪器模板一起工作也不难,只需要更多的逆向工程工作。

您可以在/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks看到与仪器捆绑的相当多的框架。

但是,我们只需要与这两者联系起来:

  • DVTInstrumentsFoundation.framework
  • InstrumentsPlugIn.framework

开始之前你应该知道的另一件事情是仪器模板实际上是插件在/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns

例如, SamplerPlugin.xrplugin适用于Time Profiler。

代码简短,并注释掉: https : //github.com/Qusic/TraceUtility

.trace实际上是一个文件夹,它在.trace / instruments_data /中有一个压缩1.run.zip文件,在一些文件夹之后你会find压缩文件。 解压缩,你会得到1.run。 不知道如何解码。 最好的方法是打电话 – 仪器。跟踪 – 这将打开仪器的细节。

您可能无法直接使用脚本来分析跟踪文件,但可以将其导出到CSV文件,该文件可以通过脚本进行分析,或者放入Excel,Numbers等。您甚至可以将导出添加为CSV到您的自动化testing,取决于它是如何完成的。