符号化需要DSYM和二进制?还是只是 DSYM?

Posted

技术标签:

【中文标题】符号化需要DSYM和二进制?还是只是 DSYM?【英文标题】:DSYM and binary required to symbolicate? Or just DSYM? 【发布时间】:2016-10-20 19:59:13 【问题描述】:

开始使用 Crashlytics,我很好奇为什么必须上传 DSYM 而而不要匹配完整的 .app 二进制文件。我的印象是,要表示您需要一个具有匹配 DSYM 文件的二进制文件。不是这样吗?基本上试图弄清楚当我在我的应用程序中所做的所有事情都是运行上传 DSYM 的构建后脚本时,Crashlytics 的神奇之处

【问题讨论】:

刚刚意识到这可能是 ***.com/questions/28404342/… 的副本。那个 Q 仍然没有答案 【参考方案1】:

来自 Fabric 和 Crashlytics 的 Mike。

dSYM 文件实际上包含应用程序的所有调试符号,这些符号需要符号化崩溃报告。这就是为什么我们建议您将Debug_Information_Format 设置为“Dwarf with dSYM”。我们还生成一个唯一的构建 ID,以便即使构建和版本号没有更改,为该构建上传的 dSYM 对于任何需要符号化的崩溃报告仍然是准确的。

您还可以在this from Apple 上阅读更多信息,但最重要的部分是:“当编译器将您的源代码翻译成机器代码时,它还会生成调试符号,将编译后的二进制文件中的每条机器指令映射回源代码行。根据调试信息格式 (DEBUG_INFORMATION_FORMAT) 构建设置,这些调试符号存储在二进制文件或配套调试符号 (dSYM) 文件中。"

如上所述,符号只能在 dSYM 文件中,因此我们建议设置为 Debug_Information_Format

【讨论】:

感谢@MikeBonnell,这一切对我来说都很有意义。但是,仍然不明白为什么 XCode 需要二进制 AND dsym(链接的 Apple 文档甚至指定了这个)如果 atos 命令,以及你们使用的任何符号,不 如果您没有使用 dSYM 将 Debug_information_format 设置为 Dwarf,则调试符号将包含在用于调试相关构建的二进制文件中,而不是单独的 dSYM 文件中。 我知道带有 dSYM 的 Dwarf 只会在 dSYM 中产生符号。但如果那是真的,当 Crashlytics 只需要 dSYM 时,为什么 XCode 需要二进制 (.app) 文件以及 dSYM?我阅读了 atos cmd 的手册页,这似乎暗示您还需要 dSYM 旁边的二进制文件。是因为 Fabric 使用了比 XCode 和 atos 不同的技术吗?

以上是关于符号化需要DSYM和二进制?还是只是 DSYM?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:如何创建 dSym 并仍然剥离符号?

如何打开 .dSYM 包查看符号列表?

减小 dSYM 文件的大小以进行符号化

Crashlytics 自动上传 dsym 文件

Xcode - UUID 与框架 dSYM 不匹配

dsym 文件的结构是啥?