2010-05-05 25 views
52

我编译通过命令行的IPhone应用程序(所以不涉及XCode的选项),我不能让我的符号名称,以显示与仪器剖析时,IPhone应用程序时。我尝试了几个标志,例如-gdawrf-2和-g,但没有任何成功。我也尝试过使用dsymutils生成一个.dSYM文件,但我不知道如何使用它,因此失败了。缺少符号名称绘制与仪器

任何帮助将不胜感激!

回答

34

如何更改设置时得到这个错误仪器获取调试信息:

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

如何生成调试信息的dSYM文件没有的XCode:

请确保您有-gdwarf-2和-g标志compilig。 (其他标志组合可能会奏效)在

-g 产生调试信息操作系统的本机格式 (刺,COFF,XCOFF,或DWARF 2)。 GDB可以使用此调试信息来调试 。在使用 stabs格式大多数系统中,-g允许使用的额外 只有GDB 可以使用的调试信息;这些额外的信息使得 调试工作更好地在GDB但 可能导致其他调试器崩溃或 拒绝读入程序。如果您 要控制某些是否 产生的额外信息,使用 -gstabs +,-gstabs,-gxcoff +,-gxcoff,或-gvms(见下文)。 GCC允许你使用-g和 。通过优化代码的缺点 可以 偶尔会产生令人惊讶的结果 :你宣布 可能不存在的一些变数;控制流程 可能会暂时移动,但您没有注意到 ;某些陈述可能不 执行,因为他们计算 常量结果或它们的值分别为 已在眼前;一些陈述可能在不同的地方执行,因为 它们被移出循环。
尽管如此,它仍然证明可以通过 调试优化输出。这使得 合理地使用优化器来处理可能存在错误的 程序。

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

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

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

将Mac的本地驱动器上的.dSYM文件并运行仪器,你通常会。

Resettig聚光灯的索引:

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

+2

谢谢。我以前从Spotlight索引中排除了我的Xcode DerivedData文件夹,以帮助Spotlight找到正确的.dsym来表示崩溃日志。去除那个伎俩。 – joerick 2011-05-02 13:24:30

+0

虽然它可能需要Finder能够显示隐藏的文件夹,并且需要使用拖放功能来暂时将文件夹添加到Un-indexed文件夹列表中,但它在删除它之后很好地适用于我,并被索引再次 – petershine 2012-08-06 02:32:08

+0

这发生在我们身上,因为出于性能原因,我们将调试信息格式从“带有dSYM文件的DWARF”更改为“DWARF”。我们在另一个方案中将格式设置为“带有dSYM文件的DWARF”。所以,只要我们想要分析,我们就必须改变方案。 – 2014-10-15 23:51:34

1

检查构建日志,并确保您的-g开关是通过编译器得到 - 它很容易在项目和/或目标水平不同的生成配置等

+0

国旗在那里,我四重检查。 – 2010-05-06 14:20:06

0

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

2

问题是聚光灯无法找到.dSYM文件。 这是因为Apple更改了DerivedData文件夹的位置。 的DerivedData现在去的〜/库

射灯不会索引〜/库而据我已经能够建立,不能索引使其是(例如mdimport被忽略)。

解决方法是在您的分析器中获取符号,只需将复制到〜/ Library你的主目录将会很好。

我用这个命令行:

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

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

1

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

56

我还有这个问题。

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

为了解决这个问题,请执行下列操作:

  1. 找到您的dSYM文件(应该在〜/库/开发商/ DerivedData/APP_NAME-XXXXXXX /编译/产品/ [BUILD_TYPE] - [设备类型]/
  2. 随着仪器停止,点击文件 - >重新Symbolicate文档
  3. 向下滚动到你的应用程序名称
  4. 单击第1步
  5. “定位”,然后选择文件夹单击开始入门按钮开始profil ing
+0

我喜欢这个解决方案,因为它不依赖Spotlight工作。这也是唯一一个为我解决这个问题的人。谢谢! – 2012-04-02 22:03:36

+0

但是现在我必须重复这样做,每次运行。任何方式使它坚持? – OldPeculier 2012-06-28 22:39:59

+17

在这个列表中没有我的应用程序名称... – k06a 2012-07-11 09:10:29

14

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

或者您可以制作一个单独的版本/配置文件配置,并将其用于您的配置文件的配置文件部分。在XCode User Guide中描述了如何添加单独的构建配置。

+0

另外,如果您正在构建配置文件,那么一定要检查“配置文件”方案,它已经分配了一些构建配置生成调试符号,如调试! (是我的问题) – k3a 2013-02-11 16:17:13

0

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

3

随着的Xcode 6种仪器可以提供的dSYM文件如下:

  • 文件 - >符号...菜单(如果在分析已停止)
  • 选择您的应用程序,并按下定位按钮
  • 选择包含dSYM的路径(通常为〜/ Library/Developer/DerivedData/APP_NAME-XXXXXXX/Build/Products/[BUI LD_CONFIGURATION] - [TARGET_PLATFORM]/)。 提示:您可以从终端复制此路径,并在对话框中使用OS X快捷方式⌘+SHIFT+G

而且仪器会问你是否要使用所选路径尝试加载的dSYM为这个应用程式的未来。回答是:)

64

我改变了我的项目设置为不包括的dSYM文件,而建筑:

enter image description here

更改它包括的dSYM文件帮助探查desymbolize符号和固定我的问题:

enter image description here

+0

我不认为这回答了这个问题,因为你的截图是从Xcode和问题故意排除Xcode(@ mac-twist是使用命令行),但我使用Xcode并有这个问题Google向我提出了这个问题,并且你的建议对我有用 - 谢谢。 – dumbledad 2016-01-17 22:53:16

+0

我有同样的问题,并使用仪器和Xcode调试构建选项。这对我有效。 Xcode 7.3.1和iOS 9.3.4 – 2016-08-24 03:06:09

+2

非常有趣的是,调试默认为没有dSYM文件包含! :/感谢分享这个。分析现在显示所有符号! :) – Jona 2016-09-15 14:54:14

4

花了几天的时间摸不着头脑了Xcode的7.1/7.3 ...

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

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

+3

+1这个答案,我已经基本上尝试了所有我能找到的有关dSYM文件,聚光灯,构建方案,调试符号格式等的东西。没有什么固定任何东西,但切换到最新的部署目标符号立即被发现。现在我想到了这一点,我认为这可能也解释了为什么调试导航器在以较低的部署目标运行时从未显示任何内存或CPU统计信息。如何去苹果没有弹出一些警告或任何: - / – w0utert 2016-05-05 21:15:01

1

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

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