【问题标题】:Are dSYM files necessary during development?开发过程中是否需要 dSYM 文件?
【发布时间】:2015-09-22 16:52:18
【问题描述】:

我知道 dSYM 文件在您为应用商店生成应用的最终版本时很有用,因为它们将包含用于表示崩溃日志的调试符号。

我的问题是它们在开发期间是否有必要。我问这个是因为禁用它们编译时间减少了 75%。

【问题讨论】:

  • 你使用调试器吗?
  • 为什么?我现在禁用了它们,我仍然可以使用调试器。
  • 我想我正在寻找不同的东西。想知道您要更改什么设置?
  • this one。通过将其更改为仅 DWARF 而不使用 dSYM,编译时间减少了 75%。
  • 我发现了一个用例,用于(暂时)将调试符号格式(返回)更改为 DWARF with dSYM File — 当您分析您的应用程序时在 Instruments 中,您已更改目标方案的配置文件设置以使用调试构建。 | 你为什么要这样做?我发现 Instruments 中的 CPU 使用率(通过 Counters 工具)源代码注释有时会令人难以置信地误导,报告基本 getter 调用或不相关的 run-only 的大量活动 -一次初始化语句。更改为 Debug(或减少 Release 的优化)将为您提供真实的故事。

标签: ios xcode macos debugging


【解决方案1】:

首先,为了避免混淆:新 iOS 项目的调试配置的默认调试信息格式是“DWARF with dSYM file”,但对于新的 OS X 项目,它只是“DWARF”。

这部分是历史性的,但目前,iOS 设置仍然是“带有 dSYM 文件的 DWARF”,只是因为 Xcode 中象征崩溃日志的部分在从 iOS 设备上复制时使用了 dSYM。因此,如果您计划测试您的开发版本,将其下载到设备,然后在调试器之外进行手指启动和练习,那么使用 dSYM 可以方便地了解您遇到的任何崩溃。如果你在调试器下运行,当然,它只会在崩溃点停止,所以你不需要符号化崩溃报告。

除此之外,我认为切换到适用于 iOS 的 DWARF 不会有任何损失。正如 SpaceDog 所指出的,它确实加快了周转时间,因为调试器知道如何懒惰地链接它需要的 DWARF,而 dSYM 创建工具 (dsymutil) 必须读取和重写所有内容。

当然,当您进行发布构建时,您想要制作和存档调试信息 - 这是 dSYM 的重点,否则调试信息(包含在 .o 文件中)将与其他中间构建产品,您将无法象征已发布应用中发生的崩溃。

【讨论】:

  • 我在某处看到调试信息包含在mach-o文件中,dSYM只是从中提取文件,对吗?
  • 这基本上是正确的,尽管它不是从 .o 文件到 dSYM 的简单复制。当链接器构建二进制映像时,它可以按照函数在 .o 文件中的方式重新排序函数,以及死代码条等。有关这些转换的信息被写入二进制的“调试映射”中。 dsymutil 在复制 dSYM 时使用该调试映射“链接”.o 文件调试信息。
  • 精彩的答案!谢谢。当我们想将一个版本下载到设备并“手动启动”它(这是 QA 大部分时间所做的)时,我们无论如何都会给他们一个发布版本 - 我们有 DSYM。
【解决方案2】:

您只希望 DWARF 用于开发,而 DWARF with dSYM 用于发布。

一个新项目默认使用此配置>

另见SO Answer

【讨论】:

  • 问题是:为什么 Apple 发布 Xcode 时打开了 dSYM 用于开发...
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
相关资源
最近更新 更多