使用Instruments分析IPhone应用程序时缺少符号名称

时间:2010-05-05 20:15:11

标签: iphone xcode profiling instruments symbols

我正在通过命令行编译一个IPhone应用程序(因此不涉及XCode选项),并且我无法在使用Instruments进行分析时显示我的符号名称。我已经尝试了几个标志,如-gdawrf-2和-g,没有任何成功。我也尝试使用dsymutils生成.dSYM文件,但我不知道我应该如何使用它以便失败。

任何帮助将不胜感激!

12 个答案:

答案 0 :(得分:86)

我在构建时将项目设置更改为不包含dSYM文件:

enter image description here

更改它以包含dSYM文件帮助分析器对符号进行符号化并修复了我的问题:

enter image description here

答案 1 :(得分:59)

我还有这个问题。

我的问题是我能够看到正在生成dSYM文件,但是仪器没有提起它。

要解决此问题,请执行以下操作:

  1. 找到您的dSYM文件(应该在〜/ Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_TYPE] - [DEVICE-TYPE] /
  2. 在仪器停止后,点击文件 - >重新符号化文件
  3. 向下滚动到您的应用名称
  4. 条目
  5. 单击“查找”并从步骤1中选择文件夹
  6. 单击“开始”按钮开始分析

答案 2 :(得分:35)

Instruments如何获取调试信息:

仪器从.dSYM文件获取调试信息,该文件通常由XCode自动生成,当使用dSYM文件将“调试信息格式”设置为DWARF并结合“生成调试符号”选项框中的复选标记时。设置这些选项将为XCode构建过程添加额外的步骤,并在编译应用程序后生成dSYM文件。每个dSYM都使用一个UUID构建,该UUID对应于它所源自的二进制文件中Mach-O部分中的UUID。 Spotlight导入程序会索引Mac上Spotlight可访问位置中的每个dSym文件的UUID。因此,SPOTLIGHT可以完成所有黑魔法并负责在您运行的.app和相应的.dSYM文件之间建立链接。

如何在没有XCode的情况下生成调试信息和dSYM文件:

确保使用-gdwarf-2和-g标志进行编译。 (其他标志组合可能有效)

  

-g   在中生成调试信息   操作系统的本机格式   (刺,COFF,XCOFF或DWARF 2)。   GDB可以使用此调试   信息。在大多数使用的系统上   stabs格式,-g允许使用额外的   调试只有GDB的信息   可以使用;这些额外的信息使   调试工作在GDB中更好,但会   可能会使其他调试器崩溃或   拒绝阅读该计划。如果你   想要控制肯定是否   生成额外信息,使用   -gstabs +, - gstabs,-gxcoff +, - gxcoff或-gvms(见下文)。 GCC允许   你使用-g和-O。快捷方式   采用优化代码可能   偶尔会产生惊人的   结果:您声明了一些变量   根本不存在;控制流程   可能会暂时移动到你没有的地方   期待它;有些陈述可能不是   执行因为他们计算   不断的结果或他们的价值观   已经在手;一些陈述可能   在不同的地方执行,因为   他们被移出了循环。
  尽管如此,它证明是可能的   调试优化输出。这样做   合理使用优化器   可能有bug的程序。

     

-gdwarf -2-    以DWARF版本2格式生成调试信息   (如果支持的话)。这是   DBX在IRIX 6上使用的格式   这个选项,GCC使用的功能   DWARF版本3有用时;   版本3向上兼容   版本2,但仍可能导致   旧调试器的问题。

使用dsymutil生成dSYM文件。如果在命令行中无法识别该工具,请使用聚光灯查找它。 重要提示:如果您正在使用网络驱动器,请在生成dSYM之前将.app文件放在mac HD上。

  

dsymutil MyApp.app/MyApp -o   MyApp.app.dSYM

将.dSYM文件放在mac的本地驱动器上,然后像往常一样运行Instruments。

重置聚光灯的索引:

如果没有显示符号,可能是因为spotligh被窃听。您可以尝试通过将包含dSYM文件(甚至您的驱动器)的文件夹添加到聚光灯首选项中的“防止聚光灯搜索这些位置”,然后立即将其删除来尝试重置聚光灯的索引。

答案 3 :(得分:15)

在Xcode 4.5中,您可以选择“从调试或发布版本配置文件”。释放默认值以在复制到设备时剥离符号。在不破坏发布配置的情况下,切换到Debug配置以进行性能分析非常容易。为此,请选择产品 - >从XCode菜单编辑Scheme。选择"个人资料"从出现的方案列表中,然后为其选择正确的构建配置。

或者您可以进行单独的发布/配置文件配置,并在您的方案的“配置文件”部分中使用它。 XCode User Guide

中介绍了如何添加单独的构建配置

答案 4 :(得分:5)

花了三天的时间试图解决Xcode 7.1 / 7.3 ......

将部署目标更改为最新版本(当时为9.3)为我解决了这个问题。我的公司以7.0为目标,因此我可能需要创建一个自定义Scheme来分析Instruments中的代码,以避免在我们进行生产发布时更改目标(或忘记更改目标)。

如果dSYM无法根据部署目标运行,那么它似乎可能是一个错误?

答案 5 :(得分:4)

使用 Xcode 6 Instruments ,您可以提供 dSYM 文件,如下所示:

  • 档案 - >符号... 菜单(停止分析时)
  • 选择您的应用,然后按找到按钮
  • 选择包含dSYM的路径(通常为〜/ Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_CONFIGURATION] - [TARGET_PLATFORM] / )。 提示:您可以从终端复制此路径,并在对话框中使用OS X快捷方式⌘+SHIFT+G

此外 Instruments 将询问您是否应该使用所选路径来尝试在将来为此应用加载dSYM。回答是:)

答案 6 :(得分:2)

问题是聚光灯找不到.dSYM文件。 这是因为Apple更改了DerivedData文件夹的位置。 DerivedData现在进入〜/ Library

Spotlight不会索引〜/ Library ,并且就我能够建立而言,也无法将其编入索引(例如忽略mdimport)。< / p>

在探查器中获取符号的工作只是将数据复制到〜/ Library 之外,例如你的主目录会很好。

我使用了这个命令行:

$ cp -r ~/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxx/Build/Products/Release-iphoneos/ ~/

当你杀死你的探查器并开始一个新的配置文件运行时,你会看到符号再次可用。

答案 7 :(得分:1)

检查构建日志并确保您的-g开关正在通过编译器 - 在项目和/或目标级别更改不同构建配置等设置时,很容易出错。

答案 8 :(得分:1)

Xcode 4附带的Instruments版本的另一项解决方法是使用Instruments的File菜单下的 Re-Symbolicate Document 菜单项。此菜单项允许您使用〜/ Library / ...目录中.dSYM文件中的符号。

答案 9 :(得分:1)

根据我的经验,这通常是因为在目标设备上安装了最近修改过的应用版本之前,已经调用了“个人资料”。

尝试在设备/目标上运行应用,然后在重新安装后再次调用“配置文件”。

答案 10 :(得分:0)

我遇到了这个问题,因为XCode项目位于Spotlight无法找到dSYM文件的网络共享上。确保它在本地驱动器上。

答案 11 :(得分:0)

我创建了一个“Profile”构建配置来处理这个问题。请参阅my answer到类似的Stackoverflow问题。