在XCode分析器中注册应用程序以进行符号化

20

我正在尝试在设备上运行的应用程序上运行XCode的时间分析器,但符号名称显示为0x2fe26643而不是[MyClass myMethod]。我意识到需要重新符号化应用程序,但我不知道该怎么做。

一些答案像这样这样说要按“重新符号化”按钮,在列表中找到您的二进制文件,然后按“定位”以手动查找dSYM。我的应用程序不在名为dSYM Locations的列表中:

enter image description here

我如何获得结果的符号化?

更新:我发布了一个YouTube剪辑,展示了当我尝试重新符号化时的情况:http://www.youtube.com/watch?v=CcLGRNkmako


我刚刚注意到你的错误:“重新符号化需要MyAppName.app.dSYM和AppleA5AE2具有匹配的UUIDS”。 - Nandeep Mali
当您从列表中选择另一个应用程序并为您的应用程序选择.dSYM文件时,就会发生这种情况。我仍然不知道您的情况是什么问题,但只是想在这里提一下。例如,尝试使用“加速”应用程序,您将得到以下结果:https://dl.dropbox.com/u/8307930/uuid.png(我的应用程序为“MultiVideoPlay”。 - Nandeep Mali
此外,这是所有应用程序都发生的问题还是只有这一个?尝试创建一个示例项目并查看是否正常运行。 - Nandeep Mali
6个回答

12

在尝试对我的应用程序进行设备分析时(在模拟器上运行正常),我遇到了同样的问题。在尝试重新符号化时,我的应用二进制文件在“dSYM位置”对话框列表中根本没有显示出来,因此我无法选择它,然后使用定位按钮将适当的dSYM关联起来,正如其他答案所建议的那样。

通过在Xcode中编辑方案并将 Profile 构建更改为 Debug 而不是 Release,我能够使设备分析中的符号化恢复正常。


4
但这可能会改变你的测试结果。仪器应该始终在发布模式下运行。 - Tudor
@Tudorizer 我完全同意。但是如果不使用调试模式,你如何解决这个问题呢? - fishinear

9
以下是我为了启用性能分析而做的工作,而不需要切换到调试模式。这适用于Xcode 4.5.1。
  1. 创建一个新的“Profile”构建配置,基于现有的“Release”配置:选择项目导航器中的项目以打开项目编辑器。在项目编辑器中选择项目并单击信息按钮。在信息窗格中展开配置部分,然后单击该部分底部的添加(+)按钮。从弹出菜单中选择现有的“Release”配置作为新配置的起点。选择复制的名称并输入“Profile”。有关详细信息,请参见Xcode用户指南

  2. 将“Profile”配置的代码签名标识设置为“iPhone Developer”(或与您的“Debug”配置相同):单击“生成设置”按钮以显示项目的生成设置。要更改所有目标的新配置的生成设置,请在项目级别上编辑它们。要更改单个目标的生成设置,请选择该目标。如果您在项目级别上进行编辑,请确保之后仔细检查目标级别:目标设置会覆盖项目设置。代码签名标识位于“代码签名”部分中。

  3. 确保“Profile”配置的“生成调试符号”设置为YES。在我的情况下,它已经是YES了。

  4. 将您的新“Profile”配置设置为由“Profile”方案使用:从菜单中选择“产品->编辑方案”,选择左侧的“Profile appname.app”选项卡,然后在“构建配置”下选择“Profile”。

  5. 在appname.entitlements文件中将“get-task-allow”属性设置为YES。

  6. 按住ALT键,从菜单中选择“产品->清除构建文件夹”。

  7. 现在从菜单中选择“产品->性能分析”,然后您就可以开始了

如果您没有执行所有这些操作,可能会发生各种奇怪的事情。我曾经完全没有符号显示,或者只有库符号显示。我曾经只有在首先进行调试构建,然后进行分析之后才会显示符号(这意味着符号可能不正确地来自调试构建)。我曾经遇到过性能分析器抱怨UUID不匹配的问题,以及臭名昭著的“授权不匹配”错误(请参见此处)。

2
他们的意思是点击“定位”按钮,然后在~/Library/Developer/Xcode/DerivedData中找到您的应用程序。但我发现以下方法似乎有效:
  • 首选项 > 搜索路径
  • 添加 ~/Library/Developer/Xcode/DerivedData(实际上我将其作为 /Users/rnapier/...,所以我不确定 ~ 是否有效)
这仍然不能自动符号化所有内容。但它让我可以使用 文件>重新符号化文档,然后只需点击“符号化”按钮,这对我很有用。这个“开箱即用”不起作用的事实太疯狂了...
我建议复制radr://10158512(它本身是10015727的副本,但该副本不在openradar中)。

如果我切换到“路径”选项卡并添加我的目录,它没有任何效果,当我重新打开符号化对话框时,它不再存在。 - bendytree
我已经通过Instrument的偏好设置添加了.../DerivedData,但是它没有产生任何效果。 - bendytree
我并不是建议点击“定位”按钮,而是说在添加搜索路径后直接点击“符号化”按钮。你试过了吗? - Rob Napier
我该如何在Instruments中打开~/Library/...?它在Instruments中是隐藏的,但我可以在Finder中看到它。 - Fredrik Johansson
Cmd-Shift-G 可以让你在文件选择器中任意跳转。你也可以在 Finder 中找到一个目录并将其拖到文件选择器中,这将导致文件选择器切换到该目录。 - Rob Napier
显示剩余2条评论

1
这也取决于XCode将您的构建放在哪里。您可以在XCode项目组织器中选择“MyCoolApp.app”,右键或按Control键单击“在Finder中显示”。并非所有项目设置都会将其放在DerivedData中(几个不同的项目设置可能会将其放在不同的位置)。现在,您已经找到了XCode存储您的构建的位置,可以尝试使用先前概述的步骤将其添加到Instruments中。当从单击“定位…”时出现文件对话框时,您只需将Finder中的.app拖放到文件对话框上,它就会进入该目录。

谢谢 quellish - 我已经仔细检查过了,我的应用程序位于 DerivedData 目录中。 - bendytree

1
如果你将“Release”构建配置的代码签名标识从“自动配置文件选择器:iPhone分发”更改为“自动配置文件选择器:iPhone开发”(我强调) ,那么你的应用程序二进制文件将列在Instrument的重新符号化表中,你可以将其指向你的派生数据文件夹。

0

上述方法没有成功。我在 Xcode 5 中使用了以下方法:

  • 获取产品位置,如 quellish 的答案所述。例如

    /Users/ME/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphoneos /Users/ME/Library/Developer/Xcode/DerivedData/Build/Products/Release-iphoneos

  • 打开 Instruments 首选项并在“dSYMs 和路径”中添加这些位置。


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