【问题标题】:Symbolicating crash logs in XCode 4.3.2在 XCode 4.3.2 中符号化崩溃日志
【发布时间】:2012-04-12 22:00:23
【问题描述】:

每当我的应用程序发生崩溃时,崩溃日志都会在管理器内以符号形式显示。现在的问题是所有指向 iOS 类的内存地址都被符号化了,但是我的应用程序类的内存地址没有被符号化。我需要设置哪个 XCode 项目属性才能启用它们。

这些是启用 iOS 类符号化的当前构建设置。我正在使用 XCode 4.3.2。

【问题讨论】:

  • 对了,你是不是正好在同一个系统上安装了Xcode 3.x?
  • @lukasz 你为什么要这个?
  • 据我所知,它曾经在符号化方面引起一些问题。当我最终摆脱 3.x 时,我的问题也随之消失。不过可能是巧合。
  • 你找到答案了吗?我也有同样的问题。它曾经在 XCode 4.1 中运行良好

标签: iphone ios xcode cocoa-touch xcode4.3


【解决方案1】:

您是否关闭了聚光灯? symbolicatecrash 使用 Spotlight 查找二进制文件和 dsym 文件,因此如果您关闭了 Spotlight,它将无法找到它们。无论如何,这里是如何将十六进制堆栈跟踪地址转换为行号:

[1] 到 XCode->Organizer 找到 .dSym 文件,点击档案,然后右键点击档案,然后 cd 进入这个目录(你可以把文件夹拖到一个 shell 窗口中)。

[2] cd 进入 dSYMs 目录。

[3] 运行 dwarfdump 命令将十六进制地址转换为代码中的行号:

dwarfdump --arch armv7 myApp.dSYM --lookup 0xaabbccdd | grep 'Line table'

【讨论】:

    【解决方案2】:

    Strip Debug Symbols During Copy:在非调试配置构建中应该是YES,因为它会炸毁你的应用程序二进制文件 30-50%

    Debug Information Format:对于所有配置都应该是DWARF with dSYM File,以便能够从任何二进制文件中符号化您的符号。

    现在我猜你是在调试版本上尝试这个,在不是 Xcode 中 build 命令的最新结果的版本上。您必须记住,每次运行 build 命令时,都会生成一个新的可执行文件和一个新的 dSYM 包,而前一个会被覆盖! (除非您使用存档功能)

    符号化脚本从应用程序的崩溃报告中解析 UUID,并通过 Spotlight 搜索相应的 .app AND .app.dSYM 包。因此,如果任一 Spotlight 未索引目标路径或二进制文件被另一个构建运行替换,它将无法符号化应用程序符号。

    【讨论】:

    • 如何向 XCode 添加一组符号,以符号化相应的崩溃日志?
    • 该构建的 dSYM 必须可用并被 Spotlight 索引。然后应该可以找到。所以。例如通过归档 beta 版本和应用商店版本,你应该没问题。调试版本未存档,每个新版本都将覆盖以前的 dSYM。即使您没有更改任何一行代码,情况也会有所不同。
    【解决方案3】:

    尝试将部署后处理设置为 NO。

    DEPLOYMENT_POSTPROCESSING。 激活此设置表示应剥离二进制文件以及文件模式、所有者和组 信息应设置为标准值。

    【讨论】:

    • 将 DEPLOYMENT_POSTPROCESSING 设置为 NO 并不能解决问题。
    【解决方案4】:

    似乎 xcode 使用上次存档的构建 .dsym 文件来表示您的日志(即使在调试中),所以尝试存档您的应用

    归档您的应用后重新符号化您的崩溃报告。

    它对我有用。

    【讨论】:

    • 这是不正确的!符号化过程使用 Spotlight 根据生成崩溃报告的应用程序 UUID 搜索匹配的 dSYM。每个构建都会产生一个新的 UUID。存档可确保您拥有这些构建的正确 dSYM。但是例如在创建调试版本时,每个新版本都将覆盖前一个版本,并且不再可能表示早期版本的崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多