【问题标题】:Debug information "DWARF" and crash logs调试信息“DWARF”和崩溃日志
【发布时间】:2019-06-05 14:12:42
【问题描述】:

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

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

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

复制期间剥离调试符号 - 调试 - 否,发布 - 是

调试信息格式 - 调试 - DWARF,发布 - 带有 dSYM 文件的 DWARF

它的工作原理是将调试信息格式设置为“DWARF with dSYM File”以进行调试配置。

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

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

【问题讨论】:

    标签: ios xcode dwarf dsym


    【解决方案1】:

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

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

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

    请参阅参与实现这些东西的 Apple 开发人员的this answer。另外,this older wiki article 他写道。

    【讨论】:

    • 感谢您的回答和链接。我认为我的困惑来源是我认为“剥离链接产品”既可以从二进制文件中剥离信息,也可以将其传输到 dSym 文件中。但我想我现在明白 dSym 文件可以/在早期阶段创建。剥离阶段只是从可执行文件中删除信息。
    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多