【问题标题】:Symbolicate crash in iOS8 with Xcode 6 .1使用 Xcode 6 .1 在 iOS8 中象征性崩溃
【发布时间】:2014-11-18 13:22:33
【问题描述】:

我曾经在 Xcode 5.1.1 中直接对崩溃报告进行符号化,因为在 Organizer 的 Devices 部分中有“Symbolicate & Re-symbolicate”。但是升级到 Xcode 6.1 后,我既找不到 symbolicate 也找不到 resymbolicate 选项来查看崩溃日志。我糊涂了。怎么做?

以前我用 iTunes 同步设备并查看来自~/Library/Logs/CrashReporter/MobileDevice 的崩溃。单击任何崩溃都会打开 Devices(Xcode) 然后符号化。但现在,它使用控制台打开,没有符号选项。 Xcode 6.1 有这样的选项吗?

【问题讨论】:

  • 请不要使用code formatting 强调。它适用于代码。

标签: ios iphone xcode6


【解决方案1】:

产品菜单下有一个可用于 Xcode 的插件。此插件可通过Alcatraz package manager获取,也可直接通过from github下载。

此插件内部包含一个 shell 脚本,该脚本设置运行以下命令以进行手动崩溃符号化。

  1. 为 symbolicatecrash.pl perl 脚本设置别名

别名 symbolicatecrash='/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash'

  1. 要查找 symbolicatecrash,它应该与上面的别名不同:

find /Applications/Xcode.app -name symbolicatecrash -type f

  1. 设置 DEVELOPER_DIR 变量:

导出 DEVELOPER_DIR='/Applications/Xcode.app/Contents/Developer'

  1. 使用 dSYM,崩溃可以表示为:

symbolicatecrash /path/to/MyApp_2012-10-01_Device.crash /path/to/MyApp.app.dSYM。

【讨论】:

  • 插件不再适用于 XCode 7 及更高版本。开箱即用的东西在这里:stackoverflow.com/a/17747804/1506363
  • 使用 Xcode 7.3 时我的路径是 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
【解决方案2】:

连接 iOS 设备,打开设备(shift 命令 2),选择设备并单击“查看设备日志”。在左侧栏中,将出现崩溃日志。选择你感兴趣的。

只要您已归档崩溃时设备上正在运行的构建,崩溃日志将在几秒钟后自动符号化。如果没有,请右键单击崩溃日志并选择“重新符号化日志”。

【讨论】:

    【解决方案3】:

    在 Xcode 6 中手动符号化崩溃日志的步骤

    1. 如果您在发布之前存档了发布版本,则转到第 2 步。否则存档您的最终版本版本(无需任何代码更改)。

    2. 要找到您的存档文件,请打开管理器 -> 选择您的项目 -> 选择最新的存档文件 -> 右键单击​​它 -> 选择“在查找器中显示”

    3. 右键单击“*.xcarchive”文件并选择“显示包内容”选项,然后转到产品文件夹 -> 应用程序文件夹 ->YourAppName.app(.app 扩展名已隐藏在某些机器上)

    4. 将您的 .app 文件复制并粘贴到其他位置。将崩溃日志文件也放在同一文件夹中。打开终端应用程序并通过“cd”命令转到您粘贴的文件夹

    5. 然后在终端中输入以下命令并附上您的崩溃地址

    xcrun atos -o YourAppName.app/YourAppName -arch armv7 -l 0xbd000 0x0013f745

    注意:如果上述命令不起作用,则将“armv7 to armv7s”更改并检查。

    例如:崩溃日志是这样的,你需要获取崩溃地址并放在上面的命令中

    3   CoreGraphics                    0x266814d3 CGPathAddLineToPoint + 171
    4   YourAppName                     0x00140a8b 0xbd000 + 539275
    5   YourAppName                     0x0013f745 0xbd000 + 534341
    6   Foundation                      0x27152d6b __NSThreadPerformPerform + 383
    7   CoreFoundation                  0x2640a375 
    

    【讨论】:

    • 你能告诉我如何从手机进行符号化...我备份了手机,然后 ~/Library/Logs/CrashReporter/MobileDevice-> 打开崩溃,它用控制台打开。它不显示如何从那里象征...
    • @Honey Console 不会象征您的崩溃日志。尝试我在步骤 5 中提到的终端中的命令,然后输入崩溃地址(在崩溃日志中),例如:“xcrun atos -o YourAppName.app/YourAppName -arch armv7 -l ”。请参阅我在回答中提到的示例崩溃日志的第 4 行和第 5 行,其中包含崩溃地址。
    • @Dax,如何从我的崩溃报告中找到您在 step5 中提到的“0xbd000 0x0013f745”值??
    • 请查看示例。我从示例崩溃日志中复制了 0xbd000 和 0x0013f745
    • 感谢@Dax,如果我们没有第二块 (0xbd000) 怎么办。我只有“0x1000f5a34 __mh_execute_header + 875060”
    【解决方案4】:

    只需连接 iOS 设备,打开设备 > 设备 > 查看设备日志,然后将崩溃拖放到该设备的崩溃文件列表中。崩溃将被添加到列表中,并且只要原始存档存在,就会被符号化。

    【讨论】:

    • 只要确保你知道这需要一点时间,Xcode 会告诉你它正在处理文件,这很糟糕。您需要等待 5 到 10 秒才能完成。
    • 我想知道,有人得到和我一样的结果吗?只有标准库函数被符号化,我的应用程序的方法仍然是十六进制符号,如0x1000f8258 0x10009c000 + 377432。我在 Xcode Organizer 中有应用程序的存档。我尝试了@Dax 的提议,我可以看到比十六进制更有意义的东西,但我仍然不明白为什么 Xcode 不能自动执行此操作,也许我做错了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多