13

我无法使我的代码符号化......我阅读了“下面”的部分:

给定崩溃报告、匹配的二进制文件及其 .dSYM 文件,符号化相对容易。Xcode Organizer 窗口有一个选项卡,用于显示当前所选设备的崩溃报告。您可以在此选项卡中查看外部收到的崩溃报告 - 只需将它们放在适当的目录中即可。这与第一节中描述的 Mac OS X 目录相同。您绑定的设备无关紧要,但放置崩溃报告的目录必须是已绑定和选定设备的目录。

不必将二进制文件和 .dSYM 文件放在任何特定位置。Xcode 使用 Spotlight 和 UUID 来定位正确的文件。但是,这两个文件必须位于同一目录中,并且该目录是由 Spotlight 索引的目录。您的主目录中的任何位置都应该没问题。

但这对我不起作用……这就是我所做的:

  • 我打开了 xcode 管理器,我的 iphone 设备带有崩溃日志
  • 应用程序和 dsym 文件在我桌面上的 xcode 项目中

其余的都应该是自动的,对吧?但是崩溃日志还没有符号化...

欢迎任何意见。

干杯。

哥提。

4

3 回答 3

13

我已经为此苦苦挣扎了好几天,终于弄明白了。我无法从我安装到手机上的任何存档应用程序中获取符号化日志。对我来说,这是构建设置的问题,尽管我确实注意到在我执行这些步骤之后它也能够符号化来自一些旧版本的日志。YMMV 可能会因旧版本的崩溃日志而异。在 iOS 4.3.1 上的 Xcode 4.0.1 中执行这些步骤后,我能够获得符号化日志。

在 Xcode Project navigator 中,单击您的项目,然后单击 Build Settings。当你归档你的应用程序时,Xcode 默认使用 Release 配置。您只想为 Release 配置设置以下值,因此您必须展开任何尚未展开的设置,以允许您在每个配置的基础上进行设置。

确保为发布配置设置了这些值:

  • 生成调试符号:是
  • 调试信息格式:带有 dSYM 文件的 DWARF
  • 部署后处理:是
  • 带链接产品:是
  • 使用单独的条带:是
  • 在复制期间去除调试符号:否
  • 条带样式:所有符号

设置好这些后,存档并重新安装您的应用程序。从生成的存档生成的新崩溃报告应正确符号化。对我来说,在执行这些步骤后,许多旧的崩溃报告也正确表示,尽管我不确定如果构建非常不同,结果会有多准确。

作为参考,我在研究了这个页面后发现了这一切:http: //developer.apple.com/tools/xcode/symbolizingcrashdumps.html

我还找到了这个页面,如果您想弄清楚特定构建设置的作用,这很方便:http: //developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference /build_setting_ref.html

希望这可以帮助!

于 2011-03-29T16:48:17.973 回答
8

为了象征您的崩溃报告,请尝试以下方法:

(a) 找到符号(/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash)

(b) 打开终端并拖动此文件(以便正确复制路径)

(c) 运行 /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatorcrash .crash .app 之类的命令(提及崩溃报告和应用程序文件的整个路径)

(d) 将显示符号化的崩溃报告

于 2010-10-07T12:33:50.603 回答
5

从苹果分析崩溃报告的步骤:

  1. 将推送到应用商店的发布 .app 文件、发布时创建的 .dSYM 文件和从 APPLE 接收的崩溃报告复制到文件夹中。

  2. 打开终端应用程序并转到上面创建的文件夹(使用 CD 命令)

  3. atos -arch armv7 -o '(your .app file name here)'/'(.dSYM filename here)'(崩溃报告中发生崩溃的内存位置)。根据报告,内存位置应该是应用程序崩溃的位置。

例如:atos -arch armv7 -o 'app name.app'/'app name' 0x0003b508

这将向您显示导致崩溃的确切行、方法名称。

谢谢

于 2011-02-10T09:25:07.977 回答