2013-05-24 50 views
11

Tôi đang viết một hệ thống lược tả tự động, để cấu hình các màn hình chuyên sâu GPU khác nhau trong Ứng dụng của tôi. Tôi đã cố gắng sử dụng 'Công cụ XCode' cho điều này, với công cụ 'Driver OpenGL ES' nắm bắt dữ liệu sử dụng GPU.Đang cố gắng đọc tệp .trace Xcode Instruments. Định dạng tệp của tệp .trace là gì?

Hệ thống tự động của tôi chạy Công cụ Xcode từ dòng lệnh chạy ứng dụng, hồ sơ và nắm bắt dữ liệu và ghi dữ liệu vào tệp ".trace".

Bây giờ tôi muốn có thể mở tệp theo dõi và đọc dữ liệu theo dõi bằng hệ thống định cấu hình tự động của mình, để tôi có thể thông báo cho nhà phát triển ứng dụng về cách các phần khác nhau của ứng dụng hoạt động.

Tuy nhiên, tôi không thể tìm thấy bất kỳ cách nào để đọc tệp theo dõi. Nó có vẻ là gói chứa các thư mục khác nhau và được chôn trong đó là một tệp .zip mà dường như chứa một số dữ liệu nhị phân. Dữ liệu trong tệp này được phân tích như thế nào?

Hệ thống thiết bị dường như khá bị phân hủy và tôi đã ngạc nhiên về mức độ khó truy cập dữ liệu theo dõi mà nó tạo ra.

Có ai biết cách phân tích cú pháp tệp theo dõi không?

Tôi hiện đang sử dụng XCode 4.6.1

+0

Bạn có thể tải lên tệp theo dõi mẫu không? – JustSid

+0

Tôi đã đặt một tệp theo dõi mẫu tại đây, nhờ [link] (https://dl.dropboxusercontent.com/u/28978817/Instruments.trace.zip) – georgeparrish

+0

Cảm ơn, tôi sẽ xem xét điều này tối nay (không có lời hứa mặc dù , kỹ năng đảo ngược kỹ sư của tôi được giới hạn ở mức tốt nhất) – JustSid

Trả lời

14

Được rồi, vì vậy để trả lời câu hỏi chính: Dữ liệu trong kho lưu trữ .zip là một khối dữ liệu được đăng với lớp NSArchiver (chúng có tiêu đề khá đặc biệt khi được mở bằng công cụ hex (tôi đã sử dụng hex) fiend), vậy đó là manh mối đầu tiên). Đó là khá thẳng về phía trước để đọc, tất cả các bạn phải làm là thực hiện cuộc gọi đến NSUnarchiver, ít nhất đó là lý thuyết. Trước khi tôi đi vào chi tiết, đây là một ứng dụng ví dụ rất đơn giản đổ một vài thông tin: https://github.com/JustSid/Traced

Vì vậy, vấn đề với NSArchiverNSUnarchiver, là trước hết bạn cần phải có tất cả các lớp lưu trữ, và thứ hai tất cả các bạn phải đọc dữ liệu theo thứ tự mà nó đã được lưu trữ (đó là bit phức tạp, tôi đã sử dụng class-dump để kết xuất giao diện cho một vài lớp bắt buộc và sau đó cố gắng hủy lưu trữ đối tượng dữ liệu bởi đối tượng và nhìn vào những gì tôi đã quay trở lại. May mắn thay, NSArchiver chết với các thông báo lỗi mô tả, nếu có một lớp bị thiếu, nó sẽ cho bạn biết tên của nó là gì). Vấn đề lớn nhất mà tôi có là nhị phân Instruments và các khung công tác đã sử dụng không chứa tất cả các lớp mà tôi cần, đặc biệt là kho lưu trữ chứa dữ liệu tuần tự của một lớp có tên là XRVideoCardRun. Tôi có giả thiết rằng tệp .template bên trong gói .trace chứa thư viện động với lớp được yêu cầu (ý tôi là, kích thước của nó lớn hơn 300kb và chứa nhiều đốm màu (đó là btw nhị phân plist)). Tôi đã quá lười biếng để trích xuất dữ liệu nhị phân ra khỏi nó và chạy class-dump chống lại nó, và tôi đã may mắn đủ rằng hầu hết các dữ liệu ra khỏi kho lưu trữ là phù hợp với những gì tôi mong đợi để xem cho lớp cha, XRRun (Tôi tìm thấy trong một trong các khung công cụ), ngoại trừ một mảng chứa từ điển, nội dung nào trông giống như dữ liệu mẫu.

Vì vậy, phần còn lại chỉ kết hợp mọi thứ lại với nhau. Nếu bạn nhìn vào ứng dụng mẫu, phần thú vị nhất sẽ là tệp XRRun.m.h.Chúng chứa một chút tài liệu và một số phần về cách trích xuất dữ liệu từ các mẫu, mặc dù bạn có thể muốn thay thế điều này bằng logic của riêng bạn cho tự động hóa của bạn. Hy vọng nó giúp.

Ứng dụng ném agains đầu ra tập tin mẫu của bạn này:

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: Nếu những thay đổi định dạng, ứng dụng sẽ phá vỡ cũng ...)

+0

Làm việc tuyệt vời Sid :) Tôi sẽ cố gắng làm việc thông qua quá trình mà bạn mô tả để giải mã dữ liệu, để tôi có thể làm điều này một lần nữa nếu có thay đổi định dạng. Tôi cũng sẽ đưa ra yêu cầu tính năng với Apple để yêu cầu một tùy chọn xuất dữ liệu theo dõi tốt hơn trên OpenGLES Driver Instrument. Cảm ơn một lần nữa, George – georgeparrish

+0

@georgeparrish Bạn được chào đón! Hãy thoải mái hỏi nếu bạn muốn hỏi điều gì! (Nhân tiện, nếu điều này trả lời câu hỏi của bạn, bạn có thể chấp nhận câu trả lời đúng bằng cách nhấp vào dấu kiểm màu xám bên cạnh nó) – JustSid

+0

Giao diện nào sẽ dành cho cấu hình CPU hoặc Bộ nhớ? Bạn đã tìm thấy XRVideoCardRun ở đâu? – Krzysiek

-1

Bạn không có khả năng để phân tích các tệp Theo dõi trực tiếp với một kịch bản, nhưng họ có thể xuất khẩu sang một file CSV có thể được phân tích bởi một kịch bản hoặc đưa vào Excel , Số, v.v. Bạn thậm chí có thể thêm xuất dưới dạng CSV vào thử nghiệm tự động của mình, tùy thuộc vào cách nó được thực hiện.

+1

-1 Câu hỏi đặt ra là cách phân tích dữ liệu cho mình – JustSid

+0

Tôi không muốn xem chế độ xem Dấu vết bằng công cụ. Tôi muốn có thể đọc tệp theo chương trình (ví dụ: sử dụng tập lệnh trình bao) để tôi có thể tự động xử lý dữ liệu. Mục đích là hệ thống hồ sơ tự động của tôi có thể đăng kết quả dữ liệu hồ sơ lên ​​một wiki để các nhà phát triển khác có thể nhìn thấy những kết quả này trong nháy mắt, khi ứng dụng đang chạy chậm. – georgeparrish

+0

Cách duy nhất để phân tích cú pháp theo cách lập trình cũng là viết một kịch bản tùy chỉnh để thực hiện điều đó và đó là một quá trình rất phức tạp. Tôi khuyên bạn nên tìm một cách khác để làm điều này. – charleyh

0

.trace thực sự là một thư mục và nó có một zip 1.run.zip trong .trace/instruments_data/và sau khi một số thư mục bạn sẽ tìm thấy mã zip. Giải nén nó và bạn sẽ nhận được 1.run. Bạn không chắc chắn cách giải mã. Cách tốt nhất là gọi - công cụ .trace - điều này sẽ mở ra trong các công cụ với các chi tiết.

1

Tôi đang cố gắng phân tích cú pháp tài liệu .trace bằng cách sử dụng các khung không có giấy tờ được vận chuyển bằng Chính các thiết bị. Nó hiện đang làm việc với Time Profiler và nó không phải là khó khăn để làm cho nó làm việc với các mẫu nhạc cụ khác là tốt, với một chút công việc kỹ thuật đảo ngược hơn.

Có một vài khung công cụ đi kèm với Công cụ như bạn có thể thấy trong /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks.

Tuy nhiên chúng tôi chỉ cần liên kết chống lại hai:

  • DVTInstrumentsFoundation.framework
  • InstrumentsPlugIn.framework

Một điều bạn nên biết trước khi bắt đầu là các mẫu công cụ thực sự plugins trong /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns.

Ví dụ: SamplerPlugin.xrplugin dành cho Trình tạo thời gian.

Mã ngắn và nhận xét: https://github.com/Qusic/TraceUtility