xcode 4.5 上的符号化崩溃失败

Posted

技术标签:

【中文标题】xcode 4.5 上的符号化崩溃失败【英文标题】:Symbolicate crash failed on xcode 4.5 【发布时间】:2012-09-23 07:30:01 【问题描述】:

我刚刚将我的 xcode 升级到 4.5 版,我尝试了三种方式来表示崩溃日志,但都没有成功。

首先,我从我的设备中获取了崩溃日志,然后将其导入到 Organizer 的“设备日志”中,但我的应用程序的确切功能无法显示,内存地址仍然显示在结果中。

其次,我将“symbolicatecrash”文件从“/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources”复制到“/ usr/local/bin' 并将.DSYM文件、.app文件和.crash文件放到一个文件夹中,运行命令:'symbolicatecrash Myapp.crash',结果还是显示内存地址。

最后,我尝试了http://xperienced.com.pl/blog/symbolicate-ios-crash-report的方法,但仍然没有运气。

您能帮我解决这个问题吗?

提前致谢!

【问题讨论】:

请添加使用-A -v选项时会显示什么错误符号,否则我们只能胡乱猜测。 @Kerni,它显示“错误:“DEVELOPER_DIR”未在 /usr/local/bin/symbolicatecrash 第 53 行定义。”然后我使用了以下两个命令: 1. sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer; 2. 导出 DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"。我再次尝试'symbolicatecrash Myapp.crash',结果仍然只显示内存地址。 我刚刚发现了诸如“为 /Users/myuser/Library/Developer/Xcode/iOS DeviceSupport/5.0.1 (9A405)/Symbols/System/Library/Frameworks/CoreFoundation.当我运行'symbolicatecrash MyApp.crash -A -v'时,框架/CoreFoundation,基地址 33c9f000"。但我找不到为我的应用程序获取符号的通知。我将 .DSYM 文件、.app 文件和 .crash 文件放在一个文件夹中,并让我的设备连接到我的 mac。有没有我错过或错误的步骤?谢谢! 我发现输出如下:.........为 MyApp 获取符号文件--[undef] 搜索 []...-- NO MATCH 在 Spotlight 中搜索 dsym ebe83c99417237ad96dbd4f0ae242ec8 的 UUID 运行 mdfind "com_apple_xcode_dsym_uuids == EBE83C99-4172-37AD-96DB-D4F0AE242EC8" '@'dsym_paths = ( ) '@'exec_names = ( ) 找不到任何 dsym 的可执行文件 ## 警告:Can'与 /var/mobile/Applications/7F44D445-8CA8-4F4E-AEDE-DC9CB9BCE04C/MyApp.app/MyApp 的版本匹配 【参考方案1】:

我根据https://github.com/TheRealKerni/QuincyKit/issues/46的讨论解决了。并从https://github.com/TheRealKerni/QuincyKit/blob/3c4a0b163ac71599a7795508fe6a91c1ced9daa6/server/local/symbolicatecrash.pl 运行 perl 脚本以获得正确的结果。

@Kerni,感谢您的脚本!

【讨论】:

经过数小时的搜索,这篇文章让我找到了一个很好的解决方案。如果您转到 Xcode->Organizer 单击档案,然后右键单击任何档案并选择在查找器中显示。备份到包含存档的名为 Xcode 的文件夹。运行终端并 cd 到此文件夹,您可以通过键入“cd”然后将文件夹拖到终端来轻松完成此操作。现在输入“mdimport”。并进入。这需要一分钟才能完成。如果您返回 Organizer 并找到您的崩溃文件,然后按 Re-Symbolicate 它现在应该会为您提供方法名称和行号。 投了赞成票,但乔的评论实际上解决了我的问题。 Joe 的答案对我不起作用,但我确实发现 dwarfdump 有效(请参阅我发布的答案)。【参考方案2】:

如果您的应用名称中有国际字符(例如“ø”、“ô”、“ç”),则符号化将失败。符号化过程中的各个步骤会弄乱这些字符,从而导致符号化路径无效。

【讨论】:

【参考方案3】:

您是否关闭了聚光灯? symbolicatecrash 使用 Spotlight 查找二进制文件和 dsym 文件,因此如果您关闭了 Spotlight,它将无法找到它们。无论如何,这里是如何将十六进制堆栈跟踪地址转换为行号:

[1] 到 XCode->Organizer 找到 .dSym 文件,点击档案,然后右键点击档案,然后 cd 进入这个目录(你可以把文件夹拖到一个 shell 窗口中)。

[2] cd 进入 dSYMs 目录。

[3] 运行 dwarfdump 命令将十六进制地址转换为代码中的行号:

dwarfdump --arch armv7 myApp.dSYM --lookup 0xaabbccdd | grep 'Line table'

【讨论】:

【参考方案4】:

我安装了 Xcode 4.5 和 4.4.1,删除 4.4.1 后,符号化问题得到了修复。

【讨论】:

【参考方案5】:

如果您还没有尝试过,请将您的 Mac 升级到 OSX 10.8.2。我正在运行 OSX 10.7.5,升级立即解决了我的符号化问题。

我几乎尝试了一切来让我的崩溃日志具有象征意义。我以前从来没有遇到过问题,但是自从我查看崩溃日志以来已经过去了几个月;在那段时间的某个时候,我升级到了 Xcode 4.5.2。在我看来,Xcode 4.5.2 symbolicatecrash perl 脚本的某些内容在运行 OSX 10.7.5 的 Mac 上无法正常工作。在 symbolicatecrash 中,它调用 atos 对地址进行符号化;即使我知道一个事实我有正确的 xcarchive,它也找不到匹配的符号。无论如何,如果你能负担得起 20 美元,请购买 OSX 10.8.2,希望这对你有用。

【讨论】:

以上是关于xcode 4.5 上的符号化崩溃失败的主要内容,如果未能解决你的问题,请参考以下文章

IOS 5 上的 Xcode 4.5 错误

Xcode 10 GM:XCUIScreen.main.screenshot() 因“dyld:惰性符号绑定失败”而崩溃

UITest 失败“上传符号在 <外部符号> 中崩溃”

XCode 4.5 - 架构 armv7 的未定义符号

迁移到 Xcode 4.5 后与可达性相关的未定义符号

在 Xcode 4.2 中启用崩溃日志符号化