符号化 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 崩溃日志后,回溯仍然不可读的主要内容,如果未能解决你的问题,请参考以下文章