Подтвердить что ты не робот

Пытается прочитать файл Xcode Instruments.trace. Каков формат файла .trace?

Я пишу автоматизированную систему профилирования, чтобы профилировать различные экраны с графическим процессором в моем приложении. Я пытаюсь использовать "XCode Instruments" для этого, используя инструмент "OpenGL ES Driver", который захватывает данные об использовании gpu.

Моя автоматическая система запускает Xcode Instruments из командной строки, которая запускает приложение, выполняет профили и захватывает данные и записывает данные в файл ".trace".

Теперь я хочу иметь возможность открыть файл трассировки и прочитать данные трассировки с помощью моей автоматической системы профилирования, чтобы я мог сообщить разработчикам приложений о том, как работают различные части приложения.

Однако я не могу найти способ чтения файла трассировки. Кажется, что это пакет, который содержит различные каталоги, и в нем есть ZIP файл, который, как представляется, содержит некоторые двоичные данные. Как обрабатываются данные в этом файле?

Система Instruments кажется довольно сложной, и я был удивлен, как трудно было получить доступ к данным трассировки, которые она производит.

Кто-нибудь знает, как разбирать файл трассировки?

В настоящее время я использую XCode 4.6.1

4b9b3361

Ответ 1

Хорошо, поэтому для ответа на главный вопрос: данные в архиве .zip - это блок данных, который был сериализован с классом NSArchiver (у них есть довольно отличительный заголовок при открытии с помощью шестнадцатеричного инструмента (я использовал hex fiend), так что это был первый ключ). Достаточно прямо читать, все, что вам нужно сделать, это позвонить NSUnarchiver, по крайней мере, в эту теорию. Прежде чем я расскажу о деталях, вот очень простое примерное приложение, которое выгружает несколько информации: https://github.com/JustSid/Traced

Таким образом, проблема с NSArchiver и NSUnarchiver заключается в том, что вам в первую очередь необходимо иметь все классы, которые были заархивированы, и, во-вторых, вам нужно прочитать данные в том порядке, в котором это (это был сложный бит, я использовал class-dump, чтобы выгрузить интерфейс для нескольких требуемых классов, а затем попытался разобрать объект данных по объекту и посмотреть, что я получил. К счастью, NSArchiver умирает с дескриптивные сообщения об ошибках, если отсутствует класс, он скажет вам, как его зовут). Самая большая проблема, с которой я столкнулся, заключалась в том, что двоичные файлы Instruments и используемые фреймворки не содержат всех необходимых мне классов, в частности, архив содержит сериализованные данные класса с именем XRVideoCardRun. У меня есть предположение, что файл .template внутри пакета .trace содержит динамическую библиотеку с требуемым классом (я имею в виду, она размером более 300 КБ и содержит много blobs (это битовый диск)). Я был слишком ленив, чтобы извлечь из него двоичные данные и запустить class-dump против него, и мне посчастливилось, что большая часть данных, полученных из архива, была совместима с тем, что я ожидал увидеть для суперкласса, XRRun (который я нашел в одной из рамок "Инструменты" ), за исключением массива, содержащего словари, содержимое которого выглядело как образцы данных.

Таким образом, остальное просто объединяло все вместе. Если вы посмотрите пример приложения, наиболее интересной частью должен быть файл XRRun.m и .h. Они содержат немного документации и некоторые части о том, как извлекать данные из образцов, хотя вы, вероятно, захотите заменить это своей собственной логикой для вашей автоматизации. Надеюсь, что это поможет.

Приложение, сброшенное снова, выводит ваш пример файла:

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: Если формат меняется, приложение также сломается...)

Ответ 2

Я пытаюсь проанализировать документ .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

Ответ 3

.trace - это фактически папка, и она имеет zip 1.run.zip в .trace/instruments_data/и после некоторых папок вы найдете zip. Разархивируйте его, и вы получите 1.run. Не знаете, как это сделать. Лучший способ - вызвать инструменты .trace - это откроется в инструментах с деталями.

Ответ 4

Возможно, вам не удастся проанализировать файл Trace напрямую с помощью script, но они могут экспортироваться в файл CSV, который может быть проанализирован с помощью script или помещен в Excel, Numbers и т.д. Возможно, возможность добавления экспорта в виде CSV для автоматического тестирования в зависимости от того, как это делается.