我正在尝试使用symbolicatecrash,并得到了有趣的结果。一位同事在另一台机器上构建了我们的发行版,因此他向我发送了 dSYM 文件。运行后发现的symbolicatecrash文件
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
它填写了所有 Apple 功能,但不包含我的功能。问题似乎是它无法(或不会)找到 dSYM 文件,可能是因为它包含我同事的计算机信息。当我从崩溃报告中复制十六进制地址时,我可以像这样使用 dwarfdump:
dwarfdump --lookup 0x0001f892 --arch armv6 路径/to/MyApp.app.dSYM
它正确地给出了该单个调用的行号。此外,symbolicatecrash 能够从我们的代码中计算出游戏的行号,但不能从 Apple 的代码中计算出。我不知道为什么他看不到 Apple 的东西,但这一切让我相信问题在于找到 dSYM,如前所述。
所以。有什么方法可以将 dSYM 的路径传递到 symbolicatecrash 命令中,或者使用其他方法使其工作吗?因为,说真的,制作一个对你的文件进行某种神奇“搜索”的工具,却因为它不想找到而找不到它,这是完全愚蠢的。
另外,知道为什么我同事的构建不会显示任何 Apple 功能吗? 当我在这里时,崩溃文件中的“+”是什么意思?像这样:
0x00059f8c -[UIWindow 发送事件:] + 108
最佳答案
symbolicatecrash 是一个巨大的 hack,你能做的最好的事情就是学会完全按照它对你的期望去做事情。或者阅读它的内部结构并修复它,但随后您必须在下一次 SDK 更新时重新修复它...
在这种情况下,我认为您的问题是您没有将 dSYM 文件放在与应用程序包相同的文件夹中。它必须与 XCode 留下的一模一样,并且应该位于聚光灯可以找到它的位置。此外,请确保名称与预期完全一致 - “dSYM”的精确大小写很重要,而且我听说由于存在错误,应用程序名称中不支持点。
如有疑问,请务必尝试使用 -v 选项来获取更详细的错误消息。
Apple 二进制文件没有行号信息,就我个人而言,我非常高兴至少能获得函数名称。情况可能会更糟。
在“-[UIWindow sendEvent:] + 108”中表示从函数开始算起的108个字节。此数据唯一有用的解释是,如果数字很小,则可能是准确的,如果数字很大,则符号表示不正常。
关于iphone - symbolicatecrash 不喜欢我的 dSYM 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2322880/