符号化崩溃在Xcode 4.5上失败

9
我刚刚将我的xcode升级到版本4.5,我尝试了三种符号化崩溃日志的方法,但都没有成功。
首先,我从我的设备中获取了崩溃日志,然后将其导入“组织器”中的“设备日志”中,但我的应用程序的确切功能无法显示,结果仍显示内存地址。
其次,我将 '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”选项时添加错误symbolicatecrash将显示什么,否则我们只能进行猜测。 - Kerni
@Kerni,它显示“错误:在/usr/local/bin/symbolicatecrash第53行未定义“DEVELOPER_DIR””。然后我使用了以下两个命令:1. sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer; 2. export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"。我再次尝试'symbolicatecrash Myapp.crash',结果仍然只显示内存地址。 - mobguang
当我运行'symbolicatecrash MyApp.crash -A -v'时,我刚刚发现了通知,例如“got symbolicator for /Users/myuser/Library/Developer/Xcode/iOS DeviceSupport/5.0.1 (9A405)/Symbols/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation,基地址为33c9f000”。但是我找不到获取我的应用程序符号化程序的通知。我将.DSYM文件,.app文件和.crash文件放在一个文件夹中,并保持设备连接到我的Mac。我错过或错误了任何步骤吗?谢谢! - mobguang
我发现输出如下:.........获取MyApp的符号文件--[undef] 在[]中搜索...-- 没有匹配项 在带有UUID为ebe83c99417237ad96dbd4f0ae242ec8的dsym中使用Spotlight进行搜索 运行mdfind "com_apple_xcode_dsym_uuids == EBE83C99-4172-37AD-96DB-D4F0AE242EC8" '@'dsym_paths = ( ) '@'exec_names = ( ) 未找到dsym的可执行文件

警告:找不到与/var/mobile/Applications/7F44D445-8CA8-4F4E-AEDE-DC9CB9BCE04C/MyApp.app/MyApp版本匹配的任何未剥离二进制文件

- mobguang
5个回答

9

12
在花费许多时间查找后,这篇文章给了我一个很好的解决方案。如果你进入Xcode->组织者,点击档案,然后右键单击任何档案并选择在Finder中显示。返回到包含档案的名为Xcode的文件夹。打开终端并cd到此文件夹,您可以通过输入“cd”然后将文件夹拖动到终端轻松完成此操作。现在输入'mdimport . '并回车。这需要一分钟左右才能完成。如果您回到组织者并找到崩溃文件,然后按Re-Symbolicate,它现在应该提供方法名称和行号。 - Joe
1
我投票支持了这个答案,但是Joe的评论实际上解决了我的问题。 - Josh
Joe的答案对我没用,但我确实发现dwarfdump可行(请参见我的回答)。 - CpnCrunch

3
你是否关闭了Spotlight?symbolicatecrash使用Spotlight来查找二进制文件和dsym文件,因此如果你关闭了Spotlight,则它将无法找到它们。无论如何,以下是如何将十六进制堆栈跟踪地址转换为行号的方法:
[1] 通过前往XCode->组织器,单击存档,然后右键单击存档并cd到此目录中(您可以将文件夹拖到shell窗口中)来查找.dSym文件。
[2] cd进入dSYMs目录。
[3] 运行dwarfdump命令将十六进制地址转换为代码中的行号:
dwarfdump --arch armv7 myApp.dSYM --lookup 0xaabbccdd | grep 'Line table'

在2023年,你最可能会使用arm64替代上述命令中的armv7。而不是使用Line table,你可以尝试使用Line info - 这对我有效。此外,请注意0xaabbccdd是磁盘上的地址,你需要通过将ASLR偏移量从回溯地址中减去来计算。在这个WWDC会议中可以找到更多信息:https://www.wwdcnotes.com/notes/wwdc21/10211/ - sig

2

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


1

如果你还没有尝试过,升级你的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,希望这对你有用。


1

我曾安装了Xcode 4.5和4.4.1,但在删除4.4.1之后,符号化问题得到了解决。


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