调试信息 "DWARF" 和崩溃日志

Debug information "DWARF" and crash logs

我试图将我对 "DWARF" 与 "DWARF with dSYM file" 调试信息格式的理解映射到我在不同 iOS 构建配置的崩溃信息中看到的内容。

我试图解决一个问题,默认情况下,使用调试配置构建的崩溃不会被符号化。这些是问题修复前我的构建设置 -

剥离链接产品 - 调试 - 否,发布 - 是

复制期间删除调试符号 - 调试 - 否,发布 - 是

调试信息格式 - 调试 - DWARF,发布 - DWARF with dSYM 文件

它起作用的原因是将调试信息格式设置为 "DWARF with dSYM File" 以进行调试配置。

我的问题是 - 如果我指定不应将产品的符号剥离到 dSYM 文件中(在剥离链接产品设置中),为什么我需要将格式设置为 "DWARF with dSYM File" ?

我(可能不正确)的理解是,如果我将其设置为 DWARF,那么所有调试信息都将在应用程序二进制文件中,我不需要单独的 dSym 文件来进行符号化?请帮助我更好地理解这一点。

在 Apple 的平台上,DWARF 永远不会嵌入到可执行文件中(展开信息除外)。启用 DWARF 调试信息仅意味着 .o 文件包含 DWARF 格式的调试信息。不过,链接器不会将其带入可执行文件。

如果您请求 dSYM 文件,单独的构建步骤会使用 dsymutil 将调试信息从 .o 文件收集到 dSYM 包或文件中。

调试器可以在需要时使用可执行文件中的映射来查找 .o 文件中的调试信息,前提是您正在构建机器上进行调试。这就是为什么您通常不需要 dSYM 文件来进行调试构建。符号化没有可执行文件,只有一个 UUID。它可以使用 UUID 找到 dSYM,但它没有找到 .o 文件的信息。

this answer by an Apple developer involved in implementing this stuff. Also, this older wiki article他写的。