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