2016-05-17 170 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