Xcode 4无法符号化崩溃日志

38

我刚把我的Xcode更新到了X.Y.Z版本。现在,我在从我的测试人员和手机收到的崩溃日志的符号化方面遇到了问题。

当我构建AdHoc分发时,我使用"存档"方案,然后使用我的开发者凭据签名创建*.ipa文件。

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


我已经找到了一个非常好的方法来使用Crittercism DSK来解决这个问题。 - Andrei Neacsu
6个回答

24

对于我而言,无论是第323行的编辑还是在Spotlight排除该问题都没有解决。因此,我追踪了symbolicatecrash中的问题,并在github上发布了一个修补版本。只需替换/usr/local/bin/symbolicatecrash,您的iOS崩溃报告就可以重新进行符号化。

这个修补程序可能不适用于Mac应用程序,因为它对.xcarchive目录的结构做出了假设,这些假设似乎不适用于桌面应用程序。

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

mdimport ~/Library/Developer/Xcode/Archives/

在这里可以获取更多有关故障排除的信息,点击这里


1
这对我很有效,而Spotlight/die更改则没有。省去了很多折腾;非常感谢。请注意,如果您想在xcode中使用它,您需要在完整路径中替换symbolicatecrash(/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/)。 - peppy
你的自定义符号化崩溃程序让我受益匪浅,而 Spotlight 异常则毫无作用。不过还是要感谢大家提供的所有有用答案! - knuku
7
警告:当我尝试使用此脚本解析我的.crash文件时,符号全部错误。栈中显示的方法来源于完全不相关且上下文无关的代码部分。最终,我通过将我的.app和.dSYM文件从我的.xcarchive中复制出来并将它们放在崩溃报告旁边来获得正确的符号化输出。我验证了Spotlight可以找到这些文件,然后将崩溃报告拖入组织器中。 - cduhn
干得好,非常感谢!现在我的所有崩溃报告都在XCode 4中被符号化了。 - Dmitry Shashlov
@cduhn的评论应该作为一个答案!它在Xcode 4.5.1和OSX 10.7上运行良好!我尝试了许多其他方法,但都失败了。 - Nianliang

24

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

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

像这样:

屏蔽无用的.app文件的Spotlight设置

(有关详细信息,请参见此博客文章。)

更新:根据joerick的评论:“这可以解决问题,但它也意味着Instruments.app找不到调试符号,因此我必须从隐私列表中删除DerivedData才能进行一些分析。”-如果您使用Instruments,请记住这一点。


这是一个不错的主意,直到一个适当的修复措施被落实。我已经向苹果提交了一个错误报告,我们会看看它的发展情况。 - Jonathan
我不得不添加“〜/Library/MobileDevice/Archived Applications”才能使其正常工作。 - Dave Dunkin
3
这个方法可以用,但同时意味着Instruments.app找不到调试符号,所以我必须把DerivedData从隐私列表中移除才能进行一些分析。 - joerick
3
与其调整 Spotlight 首选项,我更喜欢从上述推荐目录中删除有问题的应用程序的所有版本,这样符号化就能够再次正常工作了。这样做比潜在地破坏 Instruments 和其他任何工具要好。干杯! - Chris Miles
这对我没用 - 删除DerivedData目录也不起作用。似乎Xcode4中与此符号化相关的错误更多 :( - Adam
显示剩余2条评论

3
符号化脚本在查找正确的二进制文件/dSYM时出现了问题。它使用Spotlight进行操作,但常常出错。以下是几种尝试方法:
  1. 确保您的 .app 文件名中没有空格。

  2. 它可能会找到模拟器中安装的应用程序版本(反向查找),重置您的模拟器即可解决。

  3. 清除构建目录。


@coob,感谢你的回答。我的应用程序名称中没有空格。但是在构建完成后,我无法找到dSym文件。如果我在Finder中显示应用程序存档,则只会找到一个.xcodearchive文件。没有dSym或任何其他文件。 - Andrei Neacsu
你正在使用XCode 3还是4?我不熟悉4,当我在XCode 3上“在Finder中显示已存档的应用程序”时,它会在'/Users/al/Library/Application Support/Developer/Shared/Archived Applications'中显示一个名为“1DE8BA58-B733-4FA6-88E0-8F9F71297070.apparchive”的目录,其中包含应用程序,一个属性列表和dsym。 - Alastair Stuart
@David,让我理解一下,您也遇到了这个问题? - Andrei Neacsu
2
如果您的应用程序确实有空格怎么办?例如,应用程序已经在应用商店上线,我有一个崩溃报告,但Xcode拒绝符号化它。 - Adam
1
@JPK - 没有,我没有。在Xcode 4.5.x中,符号化仍然不起作用(它曾经工作了2周,然后停止了,从那以后就再也没有工作过)-苹果拒绝正确修复它。他们依赖于他们(严重损坏的)“索引整个硬盘”的搜索程序,这很慢而且写得很糟糕。而且他们没有提供任何替代方案。啊! - Adam
显示剩余6条评论

3
今天我也遇到了同样的问题。根据我在网上的研究,armv6库存在问题,导致符号化过程失败。我在这里的开发者论坛找到了答案。
对于那些没有访问权限的人,您需要从/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/创建一个symbolicatecrash脚本的副本。编辑文件并将第323行上的“die”替换为“print”(这就是它不起作用的原因,脚本在此处失败)。
然后运行symbolicatecrash来对您的崩溃日志进行符号化。您将看到来自第323行的错误,但然后它将符号化所有您自己的行和变量。它仍然无法处理系统库,但足以提供足够的信息来修复您自己的错误。
希望这可以帮助到您。

0

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

二进制图像: 0x100000000 - 0x100021ff7 +com.developer.foobar 1.1 (2) <D1B7F956-7D79-3D4D-BA53-E9EBB368A9F8> /Applications/FooBar.app/Contents/MacOS/FooBar

您可以执行以下操作:

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

对于使用“带有dSYM的DWARF”构建的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)


苹果删除了那个链接... 哎呀!! - Jay

0

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


我在使用XCode 4.0时遇到了一些问题,因为它的归档方式与Xcode 3不同。它创建了一个xarchive文件,然后我必须创建一个.ipa文件,并且像过去一样从中提取.app包发送给我的测试人员。我认为可能是因为xcode找不到dsym文件,因为它是内部的xarchive包本身。 - Nic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接