3

我正在尝试使用 symbolicatecrash,并获得有趣的结果。一位同事在另一台机器上构建了我们的发行版,所以他给我发了 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 能够从我们的代码中计算出游戏的行号,但不是 Apple 的。我不知道他为什么看不到 Apple 的东西,但这一切让我相信问题在于找到 dSYM,如前所述。

所以。有什么方法可以将 dSYM 的路径传递给 symbolicatecrash 命令,或者其他一些使它工作的方法?因为,说真的,制作一个对你的文件进行某种神奇“搜索”的工具是完全愚蠢的,只是因为它不想找到它而找不到它。

另外,知道为什么我同事的构建不会显示 Apple 的任何功能吗?当我在这里时,崩溃文件中的“+”是什么意思?像这样:

0x00059f8c -[UIWindow 发送事件:] + 108

4

1 回答 1

6

symbolicatecrash 是一个巨大的黑客,你能做的最好的就是学习完全按照它对你的期望去做事情。或者阅读它的内部结构并修复它,但是你必须为下一次 SDK 更新重新修复它......

在这种情况下,我认为您的问题是您没有将 dSYM 文件放在与应用程序包相同的文件夹中。它必须与 XCode 留下的完全一样,并且应该位于 Spotlight 可以找到它的位置。此外,请确保名称完全符合预期 - “dSYM”的精确大小写很重要,而且我听说由于错误,应用程序名称中不支持点。

如有疑问,请始终尝试使用 -v 选项以获取更详细的错误消息。

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

在“-[UIWindow sendEvent:] + 108”中,表示从函数开始算起的 108 个字节。对这个数据唯一有用的解释是,如果数字很小,它可能是准确的,如果数字很大,你的符号就会不正常。

于 2010-03-03T07:09:21.200 回答