符号化adhoc iPhone应用程序崩溃

13

我无法使我的代码符号化 ... 我读了以下部分:

给定崩溃报告、匹配的二进制文件和它的 .dSYM 文件,符号化相对容易。Xcode 组织者窗口有一个选项卡用于当前选择设备的崩溃报告。您可以在此选项卡中查看外部接收到的崩溃报告 - 只需将其放置在适当的目录中。这与第一部分中描述的 Mac OS X 目录相同。无论您连接了哪个设备,但放置崩溃报告的目录必须是连接并选定设备的目录。

没有必要将二进制文件和 .dSYM 文件放在任何特定位置。Xcode 使用 Spotlight 和 UUID 来定位正确的文件。然而,两个文件必须在同一个目录中,并且该目录是由 Spotlight 索引的目录。您的个人主目录下的任何位置都可以。

但是对我来说不起作用...这是我做的:

  • 我打开了 Xcode 组织器,并有我的 iPhone 设备崩溃日志
  • 应用程序和 dsym 文件在我的桌面上的 xcode 项目中

其他所有工作都应该是自动的,对吧?但是崩溃日志尚未符号化...

欢迎任何评论。

干杯。

Gotye。


你桌面上的 .app 和 .dSYM 文件是否与你构建 ad hoc 二进制文件时生成的完全一致?即使是微小的更改也可能会破坏符号化过程。 - Brad Larson
3个回答

13

我已经苦苦挣扎了几天,最终搞定了。 我无法从我安装到手机上的任何归档应用程序获取符号化日志。 对我而言,这是一个构建设置的问题,尽管我注意到在执行以下步骤后,它也能够从一些较旧的构建中符号化日志。 YMMV可能因来自旧版本构建的崩溃日志而异。 在iOS 4.3.1上的Xcode 4.0.1中执行以下步骤后,我成功获得了符号化的日志。

在Xcode项目导航器中,单击您的项目,然后单击“Build Settings”。 当您归档应用程序时,默认情况下,Xcode使用发布配置。 您将仅为发布配置设置以下值,因此您需要展开任何尚未展开以允许您按每个配置进行设置。

确保为发布配置设置了以下值:

  • 生成调试符号:是
  • 调试信息格式:带有dSYM文件的DWARF
  • 部署后处理:是
  • 剥离链接产品:是
  • 使用单独的剥离:是
  • 复制时不要剥离调试符号:否
  • 剥离样式:所有符号

设置完毕后,归档并重新安装您的应用程序。 从生成的归档中产生的新崩溃报告应正确进行符号化。 对我而言,许多旧的崩溃报告在遵循这些步骤后也正确地进行了符号化,尽管如果构建非常不同,则结果的准确性可能有所不同。

供参考,我在研究此页面后摸索出了所有这些内容:https://web.archive.org/web/20110727155234/http://developer.apple.com/tools/xcode/symbolizingcrashdumps.html

我还发现了这个页面,如果您想弄清特定的构建设置是什么,它会很有用: https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html


生成调试信息 - 是的,调试信息Dwarf+dSym,复制期间不剥离调试信息,全部剥离样式,默认情况下都是这样设置的。设置部署后处理和剥离链接产品对我没有影响。然而,使用单独的剥离才使它起作用!谢谢。 - dizy

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)符号化的崩溃报告将显示出来

我使用您的方法收到的崩溃报告与我在组织者中的设备日志中收到的相同。为什么? - Fernando Redondo
对于我来说,将显式路径添加到 .app 中很有帮助;虽然自从 Xcode 4.2 版本以来,它可能已经跳过了此步骤 - 我在 Xcode 中为我的应用程序遇到了非符号化崩溃。 - kender
@kender:正如我之前提到的,应该提供应用程序和崩溃报告的完整路径,我对未经符号化的报告有些困惑,你使用的Xcode版本是哪个? - Vaishnavi Naidu
@CodeWriter 我正在使用最新版本,4.3.2 (4E2002)。 - kender

5

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

  1. 将推送到App Store的发布.app文件、发布时创建的.dSYM文件和从APPLE接收到的崩溃报告复制到一个文件夹中。

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

  3. atos -arch armv7 -o'(您的.app文件名称)'/'(.dSYM文件名)'(在崩溃报告中崩溃发生的内存位置)。根据报告,内存位置应该是应用程序崩溃的位置。

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

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

谢谢


这与符号化整个崩溃报告不同。这为单个地址提供相应的符号。 - Dave Cameron
@DaveCameron 是的,上面的代码只是这样做了,但如果没有地址使用它,它允许您通过逐个提交地址来分析多个位置。https://dev59.com/43M_5IYBdhLWcg3wQQld#4954949 - Naveen Shan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接