Xcode的分析器不显示符号名称

26

升级到xCode 4.5后,当我对我的应用进行时间分析时,符号名称不再显示类或对象,而是显示内存地址,请参见以下内容。

0x2fd42e13
0x38014448

我曾经看到如下内容

main
NSManagedObjectContext
当我能看到类名时,我可以在扩展细节中追踪问题。现在扩展细节显示的与0x2fd42e13相同。

猜测 - 清理项目,然后再试一次? - nycynik
是的,我第一时间就尝试过了。 - jdog
10个回答

43
为解决我的问题,我需要告诉Instruments二进制文件的位置,因为它由于某种原因而丢失了跟踪。

1. 像平常一样运行Instruments以获取掩码数据。

enter image description here

2. 在项目导航器中,展开“产品”文件夹并单击您的应用程序(提供者(.appex)或应用程序(.app))。如果您的文件检查器不可见,请右键单击应用程序并单击“显示文件检查器”

enter image description here

3. 现在您应该在屏幕右侧看到二进制文件的文件检查器。对“完整路径”属性进行相反点击,然后单击“复制”。

enter image description here

4. 回到Instruments并进入文件->符号

enter image description here

5. 在左侧下拉菜单中选择您的应用程序或提供商,并单击旁边带有点的项目(它应该与您的应用程序名称相同)

enter image description here

6. 您会注意到二进制路径是红色的。这意味着Instruments已经无法跟踪您的二进制文件。单击右下角的小文件夹图标以打开“选择文件”对话框。按下Command+Shift+G输入目录路径,并粘贴我们之前从Xcode复制的路径。

enter image description here

7. 您现在应该已经选择了二进制文件,点击打开来打开它。点击对话框上的“完成”以关闭窗口。在分析您的代码时,Instruments现在应该显示正确的细节和符号名称。

enter image description here

如果这种情况再次发生,并且你的二进制文件位于类似路径/Users/<User>/Library/Developer/Xcode/DerivedData/...,那么你需要在Instruments中将其添加到默认搜索路径中。由于Spotlight不会索引/Library,因此Instruments不会搜索它。请前往Instruments > Preferences > Symbols,并添加/Users/<User>/Library/Developer/Xcode/DerivedData/

第二步:展开产品文件夹。这是什么意思,如何操作? - user3335999
在Xcode的左侧,您应该有一个“项目导航器”,其中列出了您项目中的所有文件。如果您没有看到它,请检查Xcode窗口右上角。应该有三个按钮,每个面板一个。单击左侧按钮以启用左侧面板,并单击左侧面板中的文件夹图标。如果您单击箭头以展开项目,则应该会看到一个名为“Products”的文件夹,将其展开,您将看到两个二进制文件。 - Nathan F.
很高兴在评论中得到了澄清!我也对那一步感到非常困惑。 - Jake T.
2
添加了一个额外的步骤,使这个修复更加持久。如果没有它,每次更新我的应用程序时,Instruments都无法找到我的二进制文件。 - Jake T.
谢谢,这让我抓狂了!在第6步中,我不得不使用Release-iphoneos路径而不是Debug-iphoneos路径才能使其正常工作(即DerivedData/MyApp-blablablablabla/Build/Products/Release-iphoneos/MyApp.app/MyApp)。显然,性能分析的默认设置是发布模式。https://developer.apple.com/forums/thread/23815 - sally2000

17

我自己解决了:

编辑您的计划,找到“WhateverProjectNameIs > iPad 6.0模拟器”

然后在左侧点击“Profile” 在信息选项卡上,将“构建配置”更改为调试(Debug)(可能设置为发布(Release)) 这样就可以了。请注意,由于某种原因,构建目标未设置为与配置文件目标相同的构建配置,这让我受挫了不止一两次。


我尝试将构建配置更改为Debug,但仍然无法工作。你有其他想法吗? - minovsky
1
尝试关闭 Xcode,清理项目并返回查看构建配置是否切换回来了吗? - jdog
1
呸!我对这个答案有很大的期望,但是没有结果。 <叹气> - Olie
使用Release构建配置使用Instruments是完全可以的。 - Valerio

2

我也遇到了同样的问题,尝试了其他人建议的所有步骤,但都没有解决我的问题。所以,我打开了 Instruments ,在 Record 按钮旁边,点击下拉菜单并使用 Choose target 选项选择目标。然后点击 Record 按钮,现在我可以在仪器面板中看到所有的方法 :)


2

对于调试配置的分析并不能给出正确的分析值。调试配置并不是为了速度而编译的,而且你所有的NSLog语句仍然存在。

我创建了一个“Profile”构建配置来解决这个问题。请参见我的答案以查看类似的Stackoverflow问题。


2

我知道这是一个老问题,但是上面提到的解决方案都对我没有用。我需要切换到最新的iOS模拟器(当前使用iOS 8,需要使用iOS 9),以正确显示符号名称。我认为Xcode工具只能与运行最新iOS SDK的模拟器一起使用。


2
重新启动仪器和Xcode解决了我的问题 :(

1

我曾经遇到过相同的问题,并尝试了其他解决方案,但都没有用。通常是Scheme出现问题,所以我从那里开始排查。但在我的情况下,它已经正确配置了。以下是最终解决方法:

  • 在Instruments中停止进程。
  • 转到“文件”->“符号”,在dSYM路径下找到未被符号化的库。
  • 在我的情况下,它指向垃圾桶中的项目。因此,我清空了垃圾箱,在Derived Data文件夹中删除了模块缓存和项目,然后重新构建项目,它就恢复正常工作了。在你的情况下,它可能指向其他不存在或无法被Instruments访问的文件。

0

将构建路径重置为默认值。我之前将其更改为tmp/文件夹,但符号无法显示代码。重置此路径后,分析器可以正确显示代码。构建路径(相对于派生数据)设置如下:{{link1:Build Path}}


0
一个 Xcode 重启解决了我的问题,在 Xcode 13.3 上。

0

我在Xcode 11.4中遇到了同样的问题: 1. 在构建成功后,在Xcode中显示YOUR_PROJECT.app文件夹,找到Release-iphoneos或Debug-iphoneos文件夹,根据您的配置文件的构建设置选择其中一个。通常我们选择Release-iphoneos。 2. 将该路径添加到Instruments中的【首选项】->【符号】中,以搜索YOUR_PROJECT.app.dSYM文件。

enter image description here


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