2016-05-17 175 views
1

我已經實現了一個使用PLCrashReporter作爲崩潰處理方法的應用程序。 ,它檢索一個報告,可以切換到人們可讀的格式。使用來自PLCrashReport的完整數據

Incident Identifier: E125648C-6BCF-4F69-9950-C8CDFB0535D3 
CrashReporter Key: e681450ca18f97638adb5f7295a4af24103b92ae 
Hardware Model:  iPad5,4 
Process:    CrashReport [6918] 
Path:    /private/var/mobile/Containers/Bundle/Application/FA6CA909-C229-457F-9EF0-35B889481B63/CrashReport.app/CrashReport 
Identifier:   net.example.CrashReport 
Version:    1 (1.0) 
Code Type:   ARM-64 (Native) 
Parent Process:  launchd [1] 

Date/Time:   2016-05-15 16:40:51.199 +0430 
Launch Time:   2016-05-15 16:40:44.122 +0430 
OS Version:   iOS 8.4.1 (12H321) 
Report Version:  105 

Exception Type: EXC_CRASH (SIGTRAP) 
Exception Codes: 0x0000000000000000, 0x0000000000000000 
Triggered by Thread: 1 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0: 
0 CrashReport      0x00000001000663a4 0x100060000 + 25508 
1 CrashReport      0x00000001000662ac 0x100060000 + 25260 
2 CrashReport      0x0000000100066304 0x100060000 + 25348 
3 UIKit       0x0000000187b411e8 0x187afc000 + 283112 

有關程序和硬件模型中的所有細節,但沒有線或類的名字!

我搜查了很多,並找出我必須使用符號過程。

  • 一些告知使用.dSYM,但應用程序還沒有在蘋果商店
  • 一些其他的解決辦法是用report.crash和類似的東西,工作,但我無法找到這個文件我應用
  • 我想要的代碼行從應用程序發送,而不是在Xcode或一些其他的工具

最終處理: 我需要一些代碼,以PLCrashReport提取行號和功能,請使用Swift。我不是很擅長目的C.

感謝

回答

2
  1. 您需要symbolicate崩潰報告,例如通過使用Xcode使用的相同工具,即symbolicatecrash.pl。這裏有很多討論引用這個,下面的鏈接提供了涵蓋這個問題的衆多答案之一:How to Manually Symbolicate iOS Crash to View Crash Logs

  2. 此外,您還需要使用導致崩潰的內部版本創建的確切dSYM,沒有dSYM上面提到的工具不能提供任何有用的數據,特別是不能提供你的類名,方法名,文件名或行號。每次在Xcode中構建應用程序時都會生成dSYM。它與App Store無關。檢查您找到應用程序包的構建文件夾。如果你沒有看到它,那麼你改變了構建設置。以下頁面顯示需要啓用的構建設置:https://support.hockeyapp.net/kb/client-integration-ios-mac-os-x-tvos/how-to-solve-symbolication-problems#build-settings-for-getting-proper-symbol-data

  3. 無法直接從您的應用程序獲取行號,因爲二進制文件無法隨時提供必要的信息。你需要用上面提到的工具和上面提到的dSYM來象徵崩潰報告以獲得行號。

  4. 由於無法僅使用應用程序二進制文件獲取行號,因此也無法在運行時獲取它們。因此,如果你在Swift或Objective-C中編寫代碼,這並不重要,這並不重要。

+0

謝謝你幫助我們更清楚地瞭解符號。還有一個問題。我應該使用二進制文件還是應該將其更改爲人類可讀的格式並將其保存爲文本文件?哪一個是符號工具所需要的? –

+0

我提到的符號化腳本只能理解文本格式,而不是二進制格式 – Kerni