2010-02-24 54 views
3

我正在尝试使用symbolicatecrash,并获得有趣的结果。一位同事在另一台机器上构建了我们的发行版本,所以他给我发送了dSYM文件。运行在symbolicatecrash不喜欢我的dSYM文件

发现

/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash

它填补了所有的苹果功能,但不是symbolicatecrash文件后矿。问题似乎是它不能(或不会)找到dSYM文件,可能是因为它有我同事的机器信息。当我从崩溃报告复制十六进制地址,我可以使用dwarfdump这样的:

dwarfdump --lookup 0x0001f892 --arch ARMv6的路径/到/ MyApp.app.dSYM

它给我的行号那个单一的电话正确。另外,symbolicatecrash能够从我们的代码中计算游戏的行数,但不能算Apple。我不知道他为什么看不到Apple的东西,但所有这些让我相信问题在于如前所述找到dSYM。

所以。有没有什么办法可以将dSYM的路径传递给symbolicatecrash命令,或者使其工作的一些其他方式?因为,严肃地说,制作一个为你的文件做某种魔术“搜索”的工具是完全愚蠢的,只是为了找不到它,因为它不想。

此外,任何想法为什么我的同事的构建不会显示任何苹果的功能? 虽然我在这里,但在崩溃文件中“+”是什么意思?就像这样:

0x00059f8c - [一个UIWindow的SendEvent:] + 108

回答

6

symbolicatecrash是一个巨大的黑客,你能做的最好是学会做事,正是因为它从你的期望。或者阅读它的内部和修复它,但然后你将不得不重新修复它的下一个SDK更新...

在这种情况下,我认为你的问题是,你没有把dSYM文件放在相同的文件夹作为应用程序包。它必须与XCode完全一样,并且应该放在聚光灯可以找到它的位置。此外,请确保名称与预期完全一致 - “dSYM”的确切格式非常重要,并且我听说应用程序名称中没有支持点的错误。

如果有疑问总是尝试使用-v选项以获取更详细的错误消息。

对于Apple二进制文件没有行号信息,我个人非常乐意至少获得函数名称。可能会更糟。

在“ - [UIWindow sendEvent:] + 108”表示从函数的开头起的108个字节。对这个数据唯一有用的解释是,如果数字很小,那么它可能是准确的,如果数字很大,那么你的符号化就会失去作用。

+0

很好的答案。我只想指出,Apple可能故意不在其二进制文件中包含这类信息(文件名和行号),原因是:他们不想泄露任何关于其源代码的额外信息。即使我们(开发人员)有这些信息,我们将如何处理它?这不像我们可以调试Apple的代码,所以知道文件名和行号是无用的。 – Roberto 2012-01-28 22:11:00