首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在尝试读取Xcode Instruments .trace文件。.trace文件的文件格式是什么?

正在尝试读取Xcode Instruments .trace文件。.trace文件的文件格式是什么?
EN

Stack Overflow用户
提问于 2013-05-24 22:40:57
回答 4查看 9.1K关注 0票数 16

我正在写一个自动分析系统,在我的应用程序中分析不同的GPU密集型屏幕。我一直在尝试使用‘’来实现这一点,使用'XCode ES Driver‘工具来捕获OpenGL使用率数据。

我的自动化系统从命令行运行Xcode Instruments,该命令行运行应用程序,分析和捕获数据,并将数据写入".trace“文件。

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

但是,我找不到任何读取跟踪文件的方法。它似乎是一个包含各种目录打包文件,其中隐藏着一个似乎包含一些二进制数据的.zip文件。该文件中的数据是如何解析的?

Instruments系统似乎相当符合实际,我很惊讶地发现访问它产生的跟踪数据是多么困难。

有人知道如何解析跟踪文件吗?

我当前使用的是XCode 4.6.1

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-25 05:15:13

好了,现在来回答主要问题:.zip存档中的数据是用NSArchiver类序列化的一大块数据(当用十六进制工具(我使用的是十六进制)打开时,它们有一个相当独特的头部,所以这是第一个线索)。读起来很简单,你所要做的就是给NSUnarchiver打个电话,至少理论上是这样的。在我进入细节之前,这里有一个非常简单的示例应用程序,它包含一些信息:https://github.com/JustSid/Traced

因此,NSArchiverNSUnarchiver的问题是,首先需要归档所有的类,其次必须按照归档的顺序读出数据(这是一个棘手的问题,我使用class-dump转储了一些所需类的接口,然后尝试逐个对象解压数据对象并查看返回的内容。幸运的是,NSArchiver死后会出现描述性的错误消息,如果缺少一个类,它会告诉你它的名称是什么)。我遇到的最大问题是Instruments二进制文件和使用的框架没有包含我需要的所有类,特别是归档文件包含名为XRVideoCardRun的类的序列化数据。我假设.trace包中的.template文件包含一个具有所需类的动态库(我的意思是,它的大小超过300kb,并且包含大量的blobs (简而言之,它是一个二进制plist))。我懒得从中提取二进制数据并对其运行class-dump,幸运的是,从归档中出来的大多数数据都与我期望看到的超类XRRun (我在一个工具框架中找到)的数据一致,除了一个包含字典的数组,它的内容看起来像示例数据。

所以,剩下的只是把所有的东西组合在一起。如果您查看示例应用程序,最有趣的部分应该是XRRun.m.h文件。它们包含一些文档,以及关于如何从样本中提取数据的一些片段,尽管您可能希望将其替换为您自己的逻辑以实现自动化。希望能有所帮助。

针对示例文件抛出的应用程序输出如下:

代码语言:javascript
复制
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:如果格式改变,应用程序也会中断...)

票数 18
EN

Stack Overflow用户

发布于 2015-09-10 21:03:23

我正在尝试使用Instruments本身附带的未记录的框架来解析.trace文档。它现在正在与Time Profiler一起工作,通过更多的反向工程工作,让它与其他仪器模板一起工作应该不是很难。

正如您在/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks中所看到的,Instruments中捆绑了相当多的框架。

然而,我们只需要链接到这两个:

  • DVTInstrumentsFoundation.framework
  • InstrumentsPlugIn.framework

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

例如,SamplerPlugin.xrplugin表示时间探查器。

代码很短,并且被注释掉了:https://github.com/Qusic/TraceUtility

票数 2
EN

Stack Overflow用户

发布于 2013-05-24 22:58:07

您可能无法使用脚本直接分析Trace文件,但它们可以导出为CSV文件,该文件可以通过脚本进行分析,或者放入Excel、数字等。您甚至可以将导出作为CSV添加到您的自动化测试中,这取决于它是如何完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16737621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档