在XCode 4.3.2中对崩溃日志进行符号化

8
每当我的应用程序崩溃时,崩溃日志都会在组织者中以符号化的形式显示。现在的问题是,所有指向iOS类的内存地址都被成功地符号化了,但是我的应用程序类的内存地址却没有被符号化。我需要设置哪个XCode项目属性才能使它们生效呢?
以下是当前已启用iOS类符号化的构建设置。我使用的是XCode 4.3.2。

顺便问一下,您是否在同一系统上安装了Xcode 3.x? - lukasz
@lukasz 为什么你要问那个? - Till
据我所知,它曾经在符号化方面引起了一些问题。当我最终摆脱3.x时,我的问题也同时消失了。不过这可能只是巧合。 - lukasz
你找到答案了吗?我也有同样的问题。在XCode 4.1中它曾经运行得很好。 - Johannes Rudolph
4个回答

1

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

[1] 通过前往XCode->组织器,在档案中单击,然后右键单击档案并转到此目录来查找.dSym文件(您可以将文件夹拖到shell窗口中)。

[2] 进入dSYMs目录。

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

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

1

复制时剥离调试符号:在非调试配置构建中应该设置为YES,因为它会使您的应用程序二进制文件膨胀30-50%。

调试信息格式:对于所有配置,应该设置为DWARF with dSYM File,以便能够从任何二进制文件中解析您的符号。

现在我猜测您正在尝试在调试构建上运行此操作,在不是Xcode中最新构建命令结果的构建上运行此操作。您必须记住,每次运行构建命令时,都会生成一个新的可执行文件和新的dSYM包,并覆盖上一个!(除非您使用存档功能)

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


我该如何在XCode中添加一组符号,以便对应崩溃日志进行符号化? - Dave Cameron
该版本的 dSYM 必须可用并由 Spotlight 索引。然后它应该可以被找到。例如,通过归档 beta 版本和应用商店发布,您就可以解决这个问题。调试版本不会被归档,每次新版本都会覆盖上一个 dSYM。即使您没有更改任何一行代码,也会产生不同的结果。 - Kerni

0

看起来xcode使用上一个已归档的构建.dsym文件来符号化您的日志(即使处于调试模式),因此尝试归档您的应用程序

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

这对我有用。


这不正确!符号化过程使用 Spotlight 搜索与生成崩溃报告的应用程序 UUID 相匹配的 dSYM。每个构建都会产生一个新的 UUID。归档确保您拥有这些构建的正确 dSYM。但是,例如,在创建调试构建时,每个新构建将覆盖先前的构建,并且无法再对早期构建中的崩溃进行符号化。 - Kerni

0

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

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


将DEPLOYMENT_POSTPROCESSING设置为NO并不能解决这个问题。 - Abhinav

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