从 PLCrashReport 获取完整数据
get use full data from PLCrashReport
我已经实现了一个使用 PLCrashReporter 作为崩溃处理方法的应用程序。
并检索可以切换为人类可读格式的报告。
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
包含有关应用程序和硬件型号的所有详细信息,但没有线路或 class 名称!
我搜索了很多,发现我必须使用 symbolication 过程。
- 有些人被告知使用 .dSYM ,但该应用程序尚未在苹果商店上架
- 其他一些解决方案是使用 report.crash 和类似的东西,但我在我的应用程序中找不到这个文件
- 我希望从应用程序发送代码行,而不是从 XCode 或其他一些工具
处理它
决赛:
我需要一些代码来从 PLCrashReport 中提取行号和函数,请使用 Swift。我不太擅长Objective C.
谢谢
您需要符号化崩溃报告,例如通过使用 Xcode 使用的相同工具,即 symbolicatecrash.pl
。这里有很多讨论都引用了这个,下面的 link 提供了涵盖这个问题的众多答案之一:How to Manually Symbolicate iOS Crash to View Crash Logs
此外,您还需要使用导致崩溃的构建创建的确切 dSYM,如果没有 dSYM,上述工具将无法提供任何有用的数据,尤其是无法为您提供 class 名称、方法名称、文件名或行号。每次在 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
无法直接从您的应用程序获取行号,因为二进制文件不会随时提供必要的信息。您需要使用上述工具和上述 dSYM 符号化崩溃报告以获取行号。
由于无法仅使用您的应用程序二进制文件获取行号,因此也无法在运行时获取它们。因此,如果您在 Swift 或 Objective-C 中编写代码并不重要,这无关紧要。
我已经实现了一个使用 PLCrashReporter 作为崩溃处理方法的应用程序。 并检索可以切换为人类可读格式的报告。
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
包含有关应用程序和硬件型号的所有详细信息,但没有线路或 class 名称!
我搜索了很多,发现我必须使用 symbolication 过程。
- 有些人被告知使用 .dSYM ,但该应用程序尚未在苹果商店上架
- 其他一些解决方案是使用 report.crash 和类似的东西,但我在我的应用程序中找不到这个文件
- 我希望从应用程序发送代码行,而不是从 XCode 或其他一些工具 处理它
决赛: 我需要一些代码来从 PLCrashReport 中提取行号和函数,请使用 Swift。我不太擅长Objective C.
谢谢
您需要符号化崩溃报告,例如通过使用 Xcode 使用的相同工具,即
symbolicatecrash.pl
。这里有很多讨论都引用了这个,下面的 link 提供了涵盖这个问题的众多答案之一:How to Manually Symbolicate iOS Crash to View Crash Logs此外,您还需要使用导致崩溃的构建创建的确切 dSYM,如果没有 dSYM,上述工具将无法提供任何有用的数据,尤其是无法为您提供 class 名称、方法名称、文件名或行号。每次在 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
无法直接从您的应用程序获取行号,因为二进制文件不会随时提供必要的信息。您需要使用上述工具和上述 dSYM 符号化崩溃报告以获取行号。
由于无法仅使用您的应用程序二进制文件获取行号,因此也无法在运行时获取它们。因此,如果您在 Swift 或 Objective-C 中编写代码并不重要,这无关紧要。