symbolicatecrash 不喜欢我的 dSYM 文件
我正在尝试使用symbolicatecrash,并得到了有趣的结果。一位同事在另一台机器上构建了我们的发行版,因此他向我发送了 dSYM 文件。 中的 symbolicatecrash 文件后,
运行/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
它会填充所有 Apple 函数,但不会填充我的函数。问题似乎是它无法(或不会)找到 dSYM 文件,可能是因为它包含我同事的计算机信息。当我从崩溃报告中复制十六进制地址时,我可以像这样使用 dwarfdump:
dwarfdump --lookup 0x0001f892 --arch armv6 path/to/MyApp.app.dSYM
它正确地为我提供了该单个调用的行号。此外,symbolicatecrash 能够从我们的代码中计算出游戏的行号,但不能从 Apple 的代码中计算出。我不知道为什么他看不到苹果的东西,但这一切让我相信问题出在找到 dSYM,正如前面提到的。
所以。有什么方法可以将 dSYM 的路径传递到 symbolicatecrash 命令中,或者使用其他方法使其工作吗?因为,说真的,制作一个对你的文件进行某种神奇“搜索”的工具,只是因为它不想找到它而找不到它,这是完全愚蠢的。
另外,知道为什么我同事的构建不会显示任何 Apple 功能吗? 当我在这里时,崩溃文件中的“+”是什么意思?像这样:
0x00059f8c -[UIWindow sendEvent:] + 108
I'm trying to use symbolicatecrash, and having interesting results. A coworker built our distribution build on another machine, so he sent me the dSYM file. After running the symbolicatecrash file found in
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash
it fills in all the Apple functions but not mine. The problem appears to be that it can't (or won't) locate the dSYM file, potentially because it has my coworker's machine information in it. When I copy the hex address from the crash report I can use dwarfdump like this:
dwarfdump --lookup 0x0001f892 --arch armv6 path/to/MyApp.app.dSYM
It gives me the line number of that single call correctly. In addition, symbolicatecrash is able to work out the game's line numbers from our code, but not Apple's. I don't know why he can't see Apple's stuff, but all this leads me to believe that the problem is with finding the dSYM, as mentioned previously.
So. Is there any way to just pass the dSYM's path into the symbolicatecrash command, or some other way of making it work? Because, seriously, it's completely dumb to make a tool that does some sort of magic "search" for your file, only to not find it because it doesn't want to.
Also, any idea why my coworker's build won't show any of Apple's functions?
And while I'm here, what does the "+" mean in the crash file? Like this:
0x00059f8c -[UIWindow sendEvent:] + 108
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
symbolicatecrash 是一个巨大的 hack,你能做的最好的事情就是学会完全按照它对你的期望做事。或者阅读它的内部结构并修复它,但随后您必须为下一个 SDK 更新重新修复它...
在这种情况下,我认为您的问题是您没有将 dSYM 文件放在与应用程序包相同的文件夹中。它必须与 XCode 留下的一模一样,并且应该位于聚光灯可以找到它的位置。此外,请确保名称与预期完全一致 - “dSYM”的精确大小写很重要,而且我听说由于错误,应用程序名称中不支持点。
如有疑问,请始终尝试使用 -v 选项来获取更详细的错误消息。
Apple 二进制文件没有行号信息,就我个人而言,我非常高兴至少能获得函数名称。情况可能会更糟。
在“-[UIWindow sendEvent:] + 108”中表示从函数开始算起的108个字节。该数据唯一有用的解释是,如果数字很小,则可能是准确的,如果数字很大,则符号表示不正常。
symbolicatecrash is one giant hack, the best you can do is learn to do things exactly as it expects from you. Or read it's internals and fix it, but then you would have to re-fix it for the next SDK update...
In this case I think your problem is that you did not place dSYM file in the same folder as the app bundle. It has to be exactly like XCode left it, and it should be in a location where spotlight will find it. Additionally, make sure the names are exactly as expected - exact casing of "dSYM" is important, and I heard that no dots are supported in the app name due to a bug.
When in doubt always try the -v option to get more detailed error messaged.
There is no line number information for Apple binaries, personally I am super happy to get at least the function names. Could have been worse.
In "-[UIWindow sendEvent:] + 108" means 108 bytes from the start of the function. The only useful interpretation of this data is that if number is small it's probably accurate, if the number is big your symbolication is out of whack.