【问题标题】:Xcode 4 failure to symbolicate Crash LogXcode 4 无法符号化崩溃日志
【发布时间】:2011-07-24 10:25:30
【问题描述】:

我刚刚将我的 Xcode 更新为 X.Y.Z。现在我对从我的测试人员甚至我的手机收到的崩溃日志的符号表示有疑问。

当我构建 AdHoc 发行版时,我使用的是“Arhive”方案,然后我使用我的开发人员凭据创建 *.ipa 文件。

这是问题吗? 而且我找不到这些 AdHoc 构建的 dSym 文件。

【问题讨论】:

  • 我找到了一个非常好的方法来使用 Crittercism DSK 来解决这个问题。

标签: iphone cocoa-touch xcode debugging adhoc


【解决方案1】:

根据崩溃日志中的 ID 定位 dSYM 文件,如下所示:

二进制图像: 0x100000000 - 0x100021ff7 +com.developer.foobar 1.1 (2) /Applications/FooBar.app/Contents/MacOS/FooBar

你可以这样做:

mdfind com_apple_xcode_dsym_uuids == D1B7F956-7D79-3D4D-BA53-E9EBB368A9F8

对于使用“DWARF with dSYM”构建的 OSX 应用程序,您实际上不需要 dSYM 文件,可以使用 https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS 的手动方法

此外,要检查二进制文件的 UID,您可以执行类似

的操作
dwarfdump --uuid /Users/valexa/Desktop/GPSnote.app/GPSnote 

UUID:6194D2B0-4E61-3834-AD15-C279EB1848XX (armv7)
UUID:D1B7F956-7D79-3D4D-BA53-E9EBB368A9F8(armv7s)

【讨论】:

  • Apple 删除了那个链接...啊!!
【解决方案2】:

对我来说,第 323 行编辑和 Spotlight 排除项都没有修复它。所以我在symbolicatecrashpublished a patched version on github 中追踪了这些问题。只需替换 /usr/local/bin/symbolicatecrash,您的 iOS 崩溃报告将重新开始符号化。

此补丁可能不适用于 Mac 应用,因为它假设 .xcarchive 目录的结构似乎不适用于桌面应用。

编辑:如果 Spotlight 没有为您的档案编入索引,您可能仍然会遇到问题。您可以通过在终端中运行以下命令来强制索引:

mdimport ~/Library/Developer/Xcode/Archives/

有关故障排除的更多信息here

【讨论】:

  • 这对我有用,而 Spotlight/die 更改却没有。省去了很多摆弄;非常感谢。如果您希望它在 xcode 中工作,请不要在完整路径中替换 symbolicatecrash (/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/)
  • 您的自定义 symbolicatecrash 让我很开心,而 Spotlight 异常则无济于事。尽管如此,还是感谢大家提供所有有用的答案!
  • 警告:当我尝试使用这个脚本时,它象征着我的 .crash 文件,但这些符号都是错误的。堆栈中显示的方法来自完全不同的代码部分,这些部分不相关且脱离上下文。通过从 .xcarchive 中复制 .app 和 .dSYM 文件并将它们放在崩溃报告旁边,我最终能够获得正确符号化的输出。我确认 Spotlight 可以找到这些文件,然后我将崩溃报告拖到管理器中。
  • 干得好,非常感谢!现在,即使在 XCode 4 中,我所有的崩溃报告也都符号化了。
  • @cduhn 的评论应该是一个答案!它适用于带有 osx 10.7 的 xcode 4.5.1!我尝试了许多其他方法,但都失败了。
【解决方案3】:

除了 coob 的回答,我发现将这些目录添加到 Spotlight 的忽略列表(系统偏好设置 → Spotlight → 隐私)有帮助:

  • ~/Library/Developer/Xcode/DerivedData/(Xcode 4 构建工件)
  • ~/Library/Application Support/iPhone Simulator/(iPhone 模拟器的文件系统)

像这样:

(有关详细信息,请参阅this blog post。)

更新:来自joerick 的评论:“这可行,但这也意味着 Instruments.app 找不到调试符号,因此我不得不从隐私列表中删除 DerivedData做一些分析。” - 如果您使用 Instruments,请记住这一点。

【讨论】:

  • 这是个好主意,直​​到适当的修复到位。我已经向 Apple 提交了错误报告,所以我们将看看它是如何发展的。
  • @Jonathan - 是的,这绝对是一个临时修复。希望苹果能在下一个 4.5GB 补丁中破解这个问题。 :-)
  • 我必须添加“~/Library/MobileDevice/Archived Applications”才能使其工作。
  • 这行得通,但这也意味着 Instruments.app 找不到调试符号,所以我不得不从隐私列表中删除 DerivedData 以进行一些分析。
  • 我没有弄乱 Spotlight 首选项,而是从上面推荐的目录中删除了所有有问题的应用程序版本,并且符号化再次适用于该应用程序。我更喜欢这个而不是可能破坏 Instruments 和任何其他工具。干杯!
【解决方案4】:

我今天遇到了同样的问题。根据我在网络上的研究,armv6 库存在导致符号化过程失败的问题。我在dev forums here找到了答案。

对于那些没有访问权限的人,您需要从/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/ 创建一个symbolicatecrash 脚本的副本。编辑文件并将第 323 行的“die”替换为“print”(这就是它不起作用的原因,脚本在这里失败)。

然后针对您的崩溃日志运行symbolicatecrash。您会从第 323 行看到错误,但随后它将象征所有 your 行和变量。系统库仍然失败,但它提供了足够的信息来修复您自己的错误。

希望这会有所帮助。

【讨论】:

    【解决方案5】:

    我想我遇到了这个问题,或者类似的问题。 Xcode 4.0 没有显示我从测试人员那里得到的崩溃符号。 我似乎通过打开我创建的 xarchive 并从其中复制 dsym 文件(右键单击并“查看包内容”)来解决这个问题,并将其放在存档文件夹中。我不能保证这是解决方案——当时我尝试了许多其他解决方案,但我知道我现在有符号而以前没有。值得一试吗?

    【讨论】:

    • 我在使用 XCode 4.0 时遇到了一些麻烦,因为它的存档方式与 Xcode 3 不同。它创建了一个 xarchive,然后我必须创建一个 .ipa,并且 - 因为它就是这样我过去做过一些事情——从中取出 .app 包发送给我的测试人员。我想也许 xcode 找不到 dsym,因为它在 xarchive 包本身的内部。
    【解决方案6】:

    符号化脚本在查找正确的二进制/dSYM 时遇到问题。它使用 Spotlight 来执行此操作,并且经常出现问题。以下是一些可以尝试的方法:

    1. 确保您的 .app 没有 空间。

    2. 它可能正在查找 您的应用安装在模拟器上 (倒退,但有时会 这对我来说)。重置您的模拟器。

    3. 清除您的构建目录。

    【讨论】:

    • @coob,谢谢你的回答。我的应用程序名称中没有任何空格。 dSym 文件构建完成后我根本找不到它。如果我在 Finder 中显示应用程序存档,我只会找到一个 .xcodearchive 文件。没有 dSym 或任何其他文件。
    • 您使用的是 XCode 3 还是 4?我不熟悉 4,当我在 XCode 3 上“在 Finder 中显示存档的应用程序”时,它会在“/Users/al/Library/Application Support/Developer/Shared/Archived Applications',其中包含应用程序、plist 和 dsym。
    • XCode 4 将其放入 ~/Library/Developer/Archives。然后是一个按日期排列的目录,然后是一个 .xcarchive 包。在 finder 中,按住 Control 单击以显示包内容。 dSYM 位于 dSYMs 目录中。应用程序位于产品/应用程序中。话虽如此,我无法让 XCode 4.0.1 象征新的崩溃日志。
    • 如果您的应用程序中有空间,您会怎么做?例如应用程序已经在应用商店上线,我有一个崩溃报告,但 Xcode 拒绝符号化它。
    • @JPK - 不,我没有。并且 Symbolicate STILL DOES NOT WORK 在 Xcode 4.5.x 中(它工作了 2 周,然后停止并且从那以后再也没有工作过) - Apple 拒绝正确修复它。他们依靠他们的(严重损坏的)“索引整个硬盘”搜索恶魔,这是缓慢且写得不好的。他们没有提供任何选择。啊!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多