如何符号化崩溃日志Xcode?

Xcode 5组织者有一个列出所有崩溃日志的视图。 我们可以在这里拖放崩溃日志。 但是自从Xcode 6以来,我知道他们已经把设备从组织中移走了,并为此创build了一个新的窗口。 但我没有find一个地方,我查看崩溃日志,我在Xcode 5中拖放到Xcode 6后,拖放到任何地方。任何人都知道答案?

好吧,我意识到你可以这样做:

  1. Xcode > Window > Devices ,select一个连接的iPhone / iPad / etc左上angular。
  2. 查看设备日志
  3. 所有日志

您可能在那里有很多日志,为了让日后更容易地find您导入的日志,您可以直接删除所有日志,除非它们对您有意义。 或者,除非你知道事故发生的确切时间点,否则应该写在文件中……我很懒,所以我只是删除所有的旧日志(这实际上需要一段时间)。

  1. 只需将文件拖放到该列表中即可。 它为我工作。

为社区写这个答案和我自己一样多。

如果有任何象征崩溃报告的问题,人们可以克服它们如下:

  1. 创build一个单独的文件夹,将Foo.appFoo.app.dSYM从相应的.xcarchive到该文件夹​​中。 同时将.crash报告复制到文件夹中。

  2. 在TextEdit或其他地方打开崩溃报告,进入Binary Images:部分,并复制第一个地址(例如0xd7000 )。

  3. cd进入文件夹。 现在你可以运行下面的命令:

    xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb

这将表示地址0x0033f9bb处的符号。 请确保为-arch选项select了正确的值(可以从Binary Images:的第一行中获得,也可以从Hardware Model:在崩溃报告和应用程序支持的拱形中)。

您也可以从崩溃报告中直接复制必要的地址(如线程调用堆栈)到一个文本文件中(在TextEdit中,按住Option并select必要的文本块,或复制并剪切),得到如下所示的内容:

 0x000f12fb 0x002726b7 0x0026d415 0x001f933b 0x001f86d3 

现在,您可以将其保存到文本文件中,例如addr.txt ,然后运行以下命令:

 xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt 

这将为所有地址一次提供一个很好的符号。

PS

在进行上述操作之前,需要检查一切设置是否正确( atos会高兴地报告任何提供的地址)。

要进行检查,请打开崩溃报告,然后转到Thread 0的调用堆栈的末尾。 从结束的第一行列出你的应用程序(通常是第二个),例如:

 34 Foo 0x0033f9bb 0xd7000 + 2525627 

应该是main()调用。 如上所述地址(在这种情况下为0x0033f9bb )应该确认这确实是main()而不是一些随机的方法或函数。

如果地址不是main() ,请检查你的加载地址( -l选项)和arch( -arch选项)。

PPS

如果上面的代码不起作用,从iTunes Connect下载你的版本的dSYM,从dSYM(Finder> Show Package Contents)中提取可执行的二进制文件,将它复制到目录中,然后使用它(即Foo )作为Foo.app/Foo的参数,而不是Foo.app/Foo

你也可以参考这个,我已经写了手动崩溃重新象征的一步一步程序

崩溃重新象征

步骤1

将所有上述文件(MyApp.app,MyApp-dSYM.dSYM和MyApp-Crash-log.crash)移动到一个文件夹中,方便使用terminal。

对于我来说,桌面是最容易到达的地方;)所以,我已经将这三个文件移动到桌面上的MyApp文件夹。

第2步

现在轮到Finder,从下面的适用于您的XCODE版本的path开始。

Xcode 8,Xcode 9 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

Xcode 7.3 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

XCode 7 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

Xcode 6 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

低于Xcode 6 Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources

从这个位置复制symbolicatecrash文件,并将其粘贴到桌面/ MyApp(等等…不要盲目追随我,我粘贴文件夹MyApp中的sybolicatecrash文件,在第一步创build一个在您最喜欢的位置,有三个文件。 )

第3步

打开terminal和CD到MyApp文件夹。

 cd Desktop/MyApp — Press Enter export DEVELOPER_DIR=$(xcode-select --print-path) 

按下Enter键

 ./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM 

按下Enter键

而已 !! Symbolicated日志在您的terminal上…现在您还在等什么? 现在简单地找出错误并解决它;)

快乐编码!

有一个更简单的方法使用Xcode(不使用命令行工具和查找地址一次)

  1. 以任何.xcarchive文件。 如果你有一个之前你可以使用它。 如果您没有,请通过运行产品>从Xcode存档来创build一个。

  2. 右键单击.xcarchive文件并select“Show Package Contents”

  3. 将dsym文件(崩溃的应用程序版本)复制到dSYMs文件夹

  4. 将.app文件(崩溃的应用程序版本)复制到Products> Applications文件夹

  5. 编辑Info.plist并编辑ApplicationProperties字典下的CFBundleShortVersionString和CFBundleVersion。 这将有助于您稍后识别存档

  6. 双击.xcarchive将其导入Xcode。 它应该打开主办单位。

  7. 回到崩溃日志(在Xcode的Devices窗口中)

  8. 把你的.crash文件拖到那里(如果还没有的话)

  9. 整个崩溃日志现在应该是象征性的。 如果没有,然后右键单击并select“重新符号崩溃日志”

确保您的Xcode应用程序名称不包含任何空格。 这是它不适合我的原因。 所以/Applications/Xcode.app工作,而/Applications/Xcode 6.1.1.app不起作用。

从苹果的文档:

使用Xcode的符号崩溃报告Xcode将自动尝试象征所遇到的所有崩溃报告。 所有你需要做的象征性的事情是添加崩溃报告到Xcode组织者。

  • 将iOS设备连接到Mac
  • 从“窗口”菜单中select“设备”
  • 在左栏的“设备”部分下,select一个设备
  • 单击右侧面板“设备信息”部分下的“查看设备日志”button
  • 将你的崩溃报告拖到显示面板的左侧栏中
  • Xcode会自动象征崩溃报告并显示结果为了表示崩溃报告,Xcode需要能够find以下内容:

    1. 崩溃的应用程序的二进制和dSYM文件。

    2. 应用程序链接的所有自定义框架的二进制文件和dSYM文件。 对于使用应用程序的源代码构build的框架,将其dSYM文件与应用程序的dSYM文件一起复制到存档中。 对于由第三方构build的框架,您需要向作者询问dSYM文件。

    3. 当应用程序崩溃时运行的操作系统的符号。 这些符号包含特定OS版本(例如,iOS 9.3.3)中包含的框架的debugging信息。 OS符号是架构特定的 – 针对64位设备的iOS版本将不包括armv7符号。 Xcode会自动从您连接到Mac的每个设备上复制操作系统符号。

如果其中任何一个丢失Xcode可能无法象征崩溃报告,或者可能只是部分象征性的崩溃报告。

对我来说,.crash文件就够了。 没有.dSYM文件和.app文件。

我运行这两个命令在我build立档案的Mac上,它的工作原理:

 export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /yourPath/crash1.crash > /yourPath/crash1_symbolicated.crash