Symbolicate崩溃日志 - Xcode 8 / macOS app

时间:2016-10-15 07:20:25

标签: xcode macos cocoa symbolicatecrash

我试图通过电子邮件表示我从用户那里收到的崩溃日志。

我在Xcode.app中使用了传统的symbolicatecrash命令,但symbolicatecrash命令失败并返回以下消息。

$/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上发布用Swift存储和编写。

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

有谁知道我如何能够将其报告版本为12的纯文本崩溃日志进行符号化?

2 个答案:

答案 0 :(得分:7)

最后,我找到了如何用macOS app来表示我的崩溃日志!

我按照下面的要点中的说明获得了人类可读的行。

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)

答案 1 :(得分:1)

使用此命令来象征整个文件。将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

在Mojave上使用Xcode 10.3测试