Symbolicate 崩溃日志 - Xcode 8 / macOS 应用程序

Symbolicate crash log - Xcode 8 / macOS app

我正在尝试符号化我通过电子邮件从用户那里收到的崩溃日志。

我在 Xcode.app 中使用了传统的 symbolicatecrash 命令,但是 symbolicatecrash 命令失败了,returns 出现了以下消息。

$/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash MY_APP.crash MY_APP.app.dSYM > readable.crash
Unsupported crash log version: 12 at /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash line 614.

正如它所说,我想符号化的崩溃日志的报告版本是 12。

Date/Time:             2016-10-15 15:40:42.625 +0900
OS Version:            Mac OS X 10.12 (16A323)
Report Version:        12

我的应用程序是纯 Cocoa 应用程序 for macOS(以前是 OS X,不适用于 iOS)它是在 macOS Sierra 上使用 Xcode 8.0 构建的,分布在 Mac App Store 上并用 Swift.

与此同时,Xcode 8.0 的组织者成功地符号化了通过 MAS 收到的同一应用程序版本的崩溃日志。 所以我想,dSYM 文件至少是正确的。 但是出了点问题。

有谁知道如何符号化报告版本为 12 的纯文本崩溃日志?

终于,我找到了如何为 macOS 应用程序符号化我的崩溃日志!

我已按照下面要点中的说明进行操作,并获得了人类可读的行。

How to symbolize OSX crash logs -gist

因此,简而言之,例如这一行:

0   com.MY_DOMAIN.MY_APP        0x000000010febce85 0x10fdc1000 + 1031813

运行 终端中的以下行:

atos -o MY_APP.app/Contents/MacOS/MY_APP -arch x86_64 -l 0x10fdc1000 0x000000010febce85

然后你会得到可读的行:

Document.init() -> Document (in MY_APP) (DefaultKey.swift:85)

使用此命令符号化整个文件。将 MyApp 和 MyCrashFile 替换为适当的值和内存地址 (0x102e27000),因此以下行:

Thread 0 Crashed: 0 com.bundle.identifier 0x0000000102f0bfb5 0x102e27000 + 937909

变为:

xcrun atos -o MyApp.app/Contents/MacOS/MyApp -arch x86_64 -l 0x102e27000 -f MyCrashFile.crash > c.sym.txt && open c.sym.txt

使用 Xcode 10.3

在 Mojave 上测试