符号化 iPad 崩溃日志后,回溯仍然不可读

Posted

技术标签:

【中文标题】符号化 iPad 崩溃日志后,回溯仍然不可读【英文标题】:backtrace still not readable after symbolicating iPad crash log 【发布时间】:2012-05-25 20:38:38 【问题描述】:

我有这些崩溃日志,在我将它们放入管理器后,会自动获得符号化,但结果始终相同。 ios 调用得到符号化,而我的应用调用没有。

我尝试将dysm和app文件复制到同一个文件夹中,删除并再次复制回来。 没有任何帮助。

知道发生了什么吗? 所以我得到了这样的东西:

    Last Exception Backtrace:
0   CoreFoundation                  0x36d4088f __exceptionPreprocess + 163
1   libobjc.A.dylib                 0x31071259 objc_exception_throw + 33
2   CoreData                        0x350337ab -[NSPersistentStoreCoordinator removePersistentStore:error:] + 227
3   MyApp                           0x00139fbb 0x2e000 + 1097659
4   MyApp                           0x0013998d 0x2e000 + 1096077
5   MyApp                           0x00139a5d 0x2e000 + 1096285
6   libdispatch.dylib               0x3171d61f dispatch_once_f$VARIANT$mp + 47
7   MyApp                           0x001399ff 0x2e000 + 1096191
8   MyApp                           0x00139b47 0x2e000 + 1096519
9   MyApp                           0x0008915d 0x2e000 + 373085
10  MyApp                           0x0008a11b 0x2e000 + 377115
11  UIKit                           0x36ffbd3d -[UIViewController _setViewAppearState:isAnimating:] + 145
12  UIKit                           0x36ffeaa3 -[UINavigationController _startTransition:fromViewController:toViewController:] + 815
13  UIKit                           0x36ffe6ab -[UINavigationController _startDeferredTransitionIfNeeded] + 251
14  UIKit                           0x36ffe56b -[UILayoutContainerView layoutSubviews] + 179
15  UIKit                           0x36fbd0bd -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 149

你可以看到 UIKit 函数被符号化但不是 MyApp

【问题讨论】:

【参考方案1】:

您需要生成崩溃报告的确切版本的 dSYM 文件和应用程序二进制文件。如果通过 Spotlight 使用符号化脚本未找到 dSYM,通常您会在 Xcode 中获得此结果。如果这是来自调试版本,而您同时创建了一个新版本,那么您就不走运了。否则,请确保存储调试版本的目录已被 Spotlight 索引。如果这是来自存档的构建,请确保存档目录已被 Spotlight 索引。

崩溃报告包含一个标题为“二进制图像”的部分,最重要的是,您的应用程序二进制文件使用二进制文件 UUID 引用。它看起来像 c42a118d722d2625f2357463535854fd,需要将其更改为大写和 8-4-4-4-12 格式,然后看起来像这样:C42A118D-722D-2625-F235-7463535854FD

您可以使用它通过终端中的聚光灯搜索 dSYM:

mdfind "com_apple_xcode_dsym_uuids == C42A118D-722D-2625-F235-7463535854FD"

【讨论】:

嗨 Kerni,我有 .dSym 和 .app 文件,我也尝试了 Xcode 中的 symbolicatecrash,但没有成功。我从 git repo 中检查了版本以进行处理,并且我们在提交应用程序时保存了 .dSym 和 .app 文件。当我运行 mdfind 时,它什么也不返回。我仍在试图弄清楚如何象征,关于下一步去哪里的任何想法? mdfind 让我想到了在 myApp.app.dSym 文件上执行 mdlist 并显示不同的 uuid。那一定是问题所在,崩溃和 dSym 文件之间的匹配缺失,这有意义吗? 崩溃报告将始终显示应用程序二进制文件的 UUID。因此,如果您拥有具有该 UUID 的应用程序二进制文件,并且您保存的 dSYM 具有不同的 UUID,则构建过程不会生成 dSYM(例如检查时间戳?)或者稍后会被覆盖。您可以将dwarfdump --uuid myApp.app/myApp 用于应用程序二进制文件,使用dwarfdump --uuid myApp.app.dSYM 用于dSym 包,以获取它们的UUID 以进行比较。 您好 Kerni,我一直在检查我们发送到商店的代码修订版并再次构建以生成 dSym 和应用程序文件,但没有运气。有没有办法将 UUID 反转为其他东西或者这是一种单向转换? 每次运行构建过程时,二进制文件都是唯一的,获得一个新的 UUID。所以没有办法扭转这种局面。您可以尝试将崩溃报告中的 UUID 更改为与新构建的 UUID(小写且无 - 字符)相同,然后查看是否获得了一些有用的结果。如果这可行,那可能是相当幸运的,这并不意味着要完成。确保将来在应用商店和 beta 版本中使用存档功能,以便您拥有一切可用的东西。

以上是关于符号化 iPad 崩溃日志后,回溯仍然不可读的主要内容,如果未能解决你的问题,请参考以下文章

崩溃日志缺少一个符号帧

如何象征崩溃日志Xcode?

无法符号化 Monotouch iOS 应用程序崩溃日志

xcode 4.5 上的符号化崩溃失败

iOS:回溯中的 + 数值(在崩溃日志中)

iOS 崩溃日志在线符号化实践