Xcode 4 Instruments不显示源代码行

时间:2011-03-11 01:34:03

标签: xcode debug-symbols xcode-instruments

我刚开始玩Xcode 4,发现无论我如何在项目中设置调试符号,Instruments都拒绝显示与我的代码对应的堆栈跟踪项的源代码行。仅显示十六进制偏移量并将我的可执行文件标识为拥有模块。启用“源位置”也是一个空白。即使对于Xcode生成的骨架OpenGL ES项目(文件→新建→新建项目...→iOS→应用程序→OpenGL ES应用程序),也会发生这种情况。

此问题仅发生在Instruments中(到目前为止,我尝试过CPU和OpenGL跟踪)。 Gdb很好地选择了调试符号。

我是否必须做一些特别的工作来查看Instruments中堆栈跟踪的源代码,或者这是Xcode 4中的错误?

到目前为止,我已经:

  • Debug Information FormatDWARF with dSYM File更改为DWARF
  • Strip Debug Symbols During CopyYes更改为No
  • 更改了构建方案以使用Debug构建,而不是使用Instruments构建Release构建。

8 个答案:

答案 0 :(得分:48)

其他答案是良好的长期修复。如果您不想等待Spotlight重建其索引并且只需要为一个Instruments会话获取符号,您可以要求Instruments指示当前会话。

  1. 选择文件→重新符号化文档... screenshot of re-symbolicate menu item
  2. 在显示的列表中找到您的二进制文件。它应该与您在Springboard上看到的名称相同。选择二进制文件,然后单击“定位”。 enter image description here
  3. 回到Xcode。按住Control键并单击.app构建产品,然后选择“在Finder中显示”。right-click menu screenshot showing show in finder item
  4. 这将显示包含二进制文件及其dSYM文件的目录。返回Instruments,导航到此目录,然后选择dSYM文件。最简单的方法是将dSYM文件直接从Finder拖到Instruments中的“选择dSYM”对话框。
  5. 最后,点击仪器中的“符号”。您现在应该在轨迹中看到符号而不是十六进制偏移。

答案 1 :(得分:44)

今天我遇到了这个问题并以这种方式解决了这个问题:

  1. 编辑方案
  2. 点击左侧的“个人资料”(这是重要的一步)
  3. 将构建配置更改为调试
  4. 应该这样做。请注意,无论出于何种原因,构建目标都没有设置为与配置文件目标相同的构建配置,这使我绊倒了一两次。

答案 2 :(得分:3)

尝试为发布配置选择不同的代码签名身份,即配置配置文件。

答案 3 :(得分:2)

我发现了问题所在,因为我遇到了同样的问题。

答案来自:Missing symbol names when profiling IPhone application with Instruments

  1. 确保您已启用启用调试标志的代码(例如-g3)。
  2. 在您希望能够访问调试信息的二进制/动态库上执行dsymutil
  3. 这会生成一个dSYM软件包文件夹,当Spotlight编制索引时,必要的调试信息可供Instruments使用。

    我认为,在你的情况下,Spotlight将事情编入索引需要一些时间 - 当它已经编入索引时,那么神奇地就会解决问题。

答案 4 :(得分:1)

刚刚开始工作;没有押韵或理由。

我花了最后半小时试图让它再次失败,希望在这里提供一个更有用的答案,但我不能,即使在从头开始重新创建骨架OpenGL程序后,回顾我的所有步骤。

我确实在emacs中打开了symbolicatecrash脚本(它已被其他地方牵连,这种问题),并且在我这样做之后就开始工作了。但我决不改变或保存它。

这是一个谜。

答案 5 :(得分:1)

没有符号的乐器的一个原因可能是Spotlight无法找到dSYM文件。因此,从DWARF with dSYMDWARF的更改不是一个好主意。您应该更改它,因为没有dSYM文件,您无论如何都不会得到符号(至少对于Snow Leopard来说似乎是这种情况,我看到有些人也有没有dSYM文件的符号报告,但是,所有那些人正在使用Lion)。进行更改后,请确保创建一个干净的构建(有时Xcode无法在我的系统上为非干净构建生成dSYM文件)。

如果您仍然没有获得任何符号,则Spotlight数据库出现问题。尝试在构建后将包含dSYM文件的文件夹添加到文件夹列表中Spotlight不会编制索引,然后再从该列表中删除它。这会导致Spotlight重新索引文件。

如果这也没有帮助,可能您的Spotlight索引已完全损坏。在这种情况下,请在终端上尝试以下操作:

sudo mdutil -i off /
sudo mdutil -E /
sudo mdutil -i on /

这会导致Spotlight首先停止索引主硬盘驱动器,然后删除过去收集的所有索引数据,然后开始重新索引它。上面的行假设您的dSYM文件位于主硬盘驱动器上(而不是任何其他硬盘驱动器或网络卷,否则您必须用该卷的相应安装点替换'/')。在再次尝试之前,给Spotlight一些时间重新索引。

答案 6 :(得分:1)

在较新版本的Instruments(我有5.1.1 (55045))中,您可以添加其他路径以搜索dSYM和源代码

打开仪器的首选项,然后单击“dSYMs和路径”选项卡。

Preference tabs

然后将您的路径添加到列表中。

Add a search path to the list

答案 7 :(得分:0)

这是我的环境......

  • XCode 8.2
  • Mac OS v10.12 Sierra

我在模拟器中运行时遇到了同样的问题,这让我感到疯狂,因为所有标准的固定设备都无法正常工作。

对我来说,将我的iPad插入MacBook并在我插入的iPad上运行与该应用程序的乐器会话。仪器在iPad上运行时正确地标记了我的应用程序,然后在我断开iPad并在模拟器中运行仪器后继续工作。

我怀疑它与更新项目以使用以下内容有关...

  • libsqlite3.tbd而不是libsqlite3.dylib
  • libstdc ++。6.tbd而不是libstdc ++。dylib

我不知道为什么会出现这种情况,但这是我在仪器中丢失符号之前所做的唯一项目变更。