关于xcode:使用Instruments分析iPhone应用程序时缺少符号名称

Missing symbol names when profiling IPhone application with Instruments

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

任何帮助将不胜感激!


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

enter image description here

对其进行更改以包括dSYM文件,有助于分析器将符号解符号并解决了我的问题:

enter image description here


我仍然对此有疑问。

我的问题是我能够看到正在生成的dSYM文件,但Instruments没有将其拾取。

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

  • 找到您的dSYM文件(应在?/库/开发人员/ DerivedData / APP_NAME-XXXXXXX /构建/产品/ [BUILD_TYPE]-[DEVICE-TYPE] /
  • 停止仪器后,单击文件->重新符号化文档
  • 向下滚动到带有您的应用名称的条目
  • 单击"查找",然后从步骤1中选择文件夹。
  • 单击开始按钮开始分析

  • Instruments如何获取调试信息:

    当从dSYM文件中将调试信息格式设置为DWARF并结合"生成调试符号"选项框中的选中标记时,Instruments会从通常由XCode自动生成的.dSYM文件中获取调试信息。设置这些选项将在XCode构建过程中增加一个额外的步骤,并在编译应用程序后生成dSYM文件。每个dSYM都有一个UUID生成,该UUID对应于其衍生二进制文件中Mach-O部分中的UUID。 Spotlight导入程序索引Mac上Spotlight可访问位置中每个dSym文件的UUID。因此,SPOTLIGHT会执行所有不可思议的工作,并负责在您正在运行的.app及其对应的.dSYM文件之间建立链接。

    如何在不使用XCode的情况下生成调试信息和dSYM文件:

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

    -g
    Produce debugging information in
    the operating system's native format
    (stabs, COFF , XCOFF , or DWARF 2).
    GDB can work with this debugging
    information. On most systems that use
    stabs format, -g enables use of extra
    debugging information that only GDB
    can use; this extra information makes
    debugging work better in GDB but will
    probably make other debuggers crash or
    refuse to read the program. If you
    want to control for certain whether to
    generate the extra information, use
    -gstabs+, -gstabs, -gxcoff+, -gxcoff, or -gvms (see below). GCC allows
    you to use -g with -O. The shortcuts
    taken by optimized code may
    occasionally produce surprising
    results: some variables you declared
    may not exist at all; flow of control
    may briefly move where you did not
    expect it; some statements may not be
    executed because they compute
    constant results or their values were
    already at hand; some statements may
    execute in different places because
    they were moved out of loops.
    Nevertheless it proves possible to
    debug optimized output. This makes it
    reasonable to use the optimizer for
    programs that might have bugs.

    -gdwarf-2
    Produce debugging information in DWARF version 2 format
    (if that is supported). This is the
    format used by DBX on IRIX 6. With
    this option, GCC uses features of
    DWARF version 3 when they are useful;
    version 3 is upward compatible with
    version 2, but may still cause
    problems for older debuggers.

    使用dsymutil生成dSYM文件。如果无法在命令行中识别该工具,请使用Spotlight进行查找。
    重要信息:如果正在使用网络驱动器,则在生成dSYM之前,请将.app文件放在Mac HD上。

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

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

    重置聚光灯的索引:

    如果未显示符号,则可能是因为Spotligh被窃听了。您可以尝试通过将包含dSYM文件(甚至驱动器)的文件夹添加到"聚光灯"偏好设置中的"防止聚光灯搜索这些位置"来尝试重置聚光灯的索引,然后立即将其删除。


    在Xcode 4.5中,您可以选择从Debug或Release版本进行Profile。发行版默认为在复制到设备时剥离符号。切换到Debug配置进行概要分析非常容易,而不会破坏您的发布配置。为此,请从XCode菜单中选择Product-> Edit Scheme。从出现的方案列表中选择"配置文件",然后为其选择正确的构建配置。

    或者,您可以进行单独的发行/配置文件配置,并在方案的"配置文件"部分中使用它。 《 XCode用户指南》中介绍了如何添加单独的构建配置。


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

    • 文件->符号...菜单(停止分析时)
    • 选择您的应用,然后按"定位"按钮
    • 选择包含dSYM的路径(通常?/库/开发人员/ DerivedData / APP_NAME-XXXXXXX /构建/产品/ [BUILD_CONFIGURATION]-[TARGET_PLATFORM] /)。提示:您可以从终端复制此路径,并在对话框中使用OS X快捷方式?+SHIFT+G

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


    花了三天的时间试图为Xcode 7.1 / 7.3弄清楚这一点...

    将部署目标更改为最新版本(当时为9.3)可以为我解决此问题。我公司的目标是7.0,所以我可能必须创建一个自定义Scheme,以便在Instruments中对代码进行性能分析,以避免在进行生产发布时不得不更改目标(或忘记更改目标)。

    如果dSYM无法基于部署目标工作,这似乎是一个错误吗?


    问题是Spotlight无法找到.dSYM文件。
    这是因为Apple更改了DerivedData文件夹的位置。
    DerivedData现在进入?/库

    Spotlight不会为?/库建立索引,据我所能建立的,也无法对其建立索引(例如mdimport被忽略)。

    要在分析器中获取符号,一种解决方法是简单地将数据复制到?/ Library之外,例如您的主目录就可以了。

    我使用了以下命令行:

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

    当您终止分析器并开始新的配置文件运行时,您将看到这些符号再次可用。


    以我的经验,这通常是因为在目标设备上安装了应用程序的最新修改版本之前已调用"配置文件"。

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


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


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


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