在使用Instruments分析iPhone应用程序时缺less符号名称

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

任何帮助将不胜感激!

我改变了我的项目设置,在构build时不包括dSYM文件:

在这里输入图像描述

将其更改为包含dSYM文件可帮助探查器去除符号并解决我的问题:

在这里输入图像描述

我仍然有这个问题。

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

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

  1. find你的dSYM文件(应该在〜/ Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_TYPE] – [DEVICE-TYPE] /
  2. 随着仪器停止,点击文件 – >重新符号文件
  3. 使用您的应用程序名称向下滚动到条目
  4. 点击“定位”并从步骤1中select文件夹
  5. 单击开始button开始分析

仪器如何获取debugging信息:

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

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

确保你用-gdwarf-2和-g标志编译。 (其他标志组合可能工作)

-g以操作系统的本机格式(stabs,COFF,XCOFF或DWARF 2)生成debugging信息。 GDB可以使用这个debugging信息。 在大多数使用stabs格式的系统上,-g使用额外的debugging信息,只有GDB可以使用; 这些额外的信息使得GDB中的debugging工作更好,但是可能会使其他debugging器崩溃或拒绝读取程序。 如果要控制是否生成额外信息,请使用-gstabs +,-gstabs,-gxcoff +,-gxcoff或-gvms(请参见下文)。 GCC允许你使用-g和-O。 优化代码所采用的快捷方式可能偶尔会产生令人惊讶的结果:您声明的一些variables可能根本不存在; 控制的stream动可能会短暂地移动到你不期望的地方; 一些陈述可能不会被执行,因为他们计算了不变的结果或者他们的价值已经在手边; 一些语句可能在不同的地方执行,因为它们被移出循环。
不过,它certificate可以debugging优化的输出。 这使得对于可能有错误的程序使用优化器是合理的。

-gdwarf-2以DWARF版本2格式(如果支持)生成debugging信息。 这是IRIX 6上DBX所使用的格式。使用此选项,GCC在使用DWARF版本3时会使用其function; 版本3与版本2向上兼容,但对于较早的debugging器可能仍然会造成问题。

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

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

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

重新设置聚光灯的索引:

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

在Xcode 4.5中,您可以select从debugging版本或发布版本进行configuration文件。 发布默认为复制到设备时剥离符号。 切换到debuggingconfiguration进行性能分析,而不会中断您的发布configuration,这是非常容易的。 为此,请从XCode菜单中selectProduct – > Edit Scheme。 从出现的scheme列表中select“configuration文件”,然后select正确的构buildconfiguration。

或者你可以做一个单独的版本/configuration文件configuration,并在你的scheme的configuration文件部分使用。 “ XCode用户指南”中介绍了如何添加单独的构buildconfiguration。

花了三天试图找出Xcode 7.1 / 7.3 …

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

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

使用Xcode 6仪器,您可以提供如下的dSYM文件:

  • 文件 – >符号…菜单(停止分析时)
  • select你的应用程序,然后按定位button
  • select包含dSYM的path(通常是〜/ Library / Developer / DerivedData / APP_NAME-XXXXXXX / Build / Products / [BUILD_CONFIGURATION] – [TARGET_PLATFORM] / )。 提示:您可以从terminal复制此path,并在对话框中使用OS X快捷键⌘+SHIFT+G

此外, 仪器会问你是否应该使用选定的path来尝试在未来的这个应用程序加载dSYM。 回答是:)

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

Spotlight不会索引〜/ Library ,并且据我所能build立, 也不能索引它 (例如mdimport被忽略)。

解决你的分析器中的符号的方法是简单地将数据复制到〜/ Library之外,例如你的主目录将会正常工作。

我使用这个命令行:

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

当你杀死你的分析器,并开始一个新的configuration文件运行,你会看到,符号是可用的。

检查构build日志,确保你的-g开关正在接近编译器 – 当改变项目的设置和/或不同的构buildconfiguration的目标级别时,很容易出错。

在Xcode 4附带的工具版本中,另一个解决方法是使用文件菜单下的重新符号文档菜单项。 此菜单项允许您使用位于〜/ Library / …目录中的.dSYM文件中的符号。

根据我的经验,这通常是因为在目标设备上安装了应用程序的最新修改版本之前调用了“configuration文件”。

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

我得到了这个问题,因为XCode项目是在Spotlight找不到dSYM文件的networking共享上。 确保它在本地驱动器上。

我创build了一个“Profile”构buildconfiguration来处理这个问题。 看到我的答案类似的Stackoverflow问题。