28

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

这个问题只发生在 Instruments 中(到目前为止我已经尝试过 CPU 和 OpenGL 跟踪)。Gdb 可以很好地提取调试符号。

我是否必须做一些特别的事情才能在 Instruments 中查看堆栈跟踪的源代码,或者这是 Xcode 4 中的错误?

到目前为止,我已经:

  • Debug Information Format从更改DWARF with dSYM FileDWARF
  • Strip Debug Symbols During Copy从更改YesNo
  • 将构建方案更改为使用 Debug 构建而不是带有 Instruments 的 Release 构建。
4

8 回答 8

49

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

  1. 选择文件→重新符号化文档... 重新符号化菜单项的屏幕截图
  2. 在出现的列表中找到您的二进制文件。它应该与您在 Springboard 上看到的名称相同。选择您的二进制文件并单击“定位”。在此处输入图像描述
  3. 回到 Xcode。按住 Control 并单击您的 .app 构建产品并选择“在 Finder 中显示”。右键单击菜单屏幕截图显示在查找器项目中显示
  4. 这将显示包含您的二进制文件及其dSYM文件的目录。返回 Instruments,导航到此目录,然后选择您的dSYM文件。最简单的方法是将dSYM文件直接从 Finder 拖到 Instruments 中的“Select dSYM”对话框中。
  5. 最后,点击 Instruments 中的“Symbolicate”。您现在应该在迹线中看到符号,而不是十六进制偏移量。
于 2012-01-02T15:44:29.597 回答
45

I had this issue today and solved it this way:

  1. Edit scheme
  2. Click on "Profile" on the left (this is the important step)
  3. Change Build Configuration to Debug

That should do it. Note that for whatever reason, the build target is not set to the same build configuration as the profile target and this has tripped me up more than a time or two.

于 2011-09-08T22:00:28.663 回答
3

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

于 2012-11-07T15:09:58.277 回答
2

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

答案来自:使用 Instruments 分析 iPhone 应用程序时缺少符号名称

  1. 确保您已在启用调试标志的情况下编译您的代码(例如-g3)。
  2. dsymutil在您希望能够访问其调试信息的二进制/动态库上执行。

这会生成一个 dSYM 包文件夹,当 Spotlight 索引时,必要的调试信息对 Instruments 可用。

我想在您的情况下,Spotlight 花了一些时间才将事物编入索引 - 当它有了索引时,事情就神奇地解决了。

于 2011-04-08T09:46:31.190 回答
1

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

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

我确实在 emacs 中打开了 symbolicatecrash 脚本(它已在其他地方受到影响,wrt 这种问题),并且在我这样做之后它开始工作。但我从来没有改变或保存它。

这是一个谜。

于 2011-03-11T03:24:10.127 回答
1

仪器没有符号的原因之一可能是 Spotlight 找不到 dSYM 文件。所以你从DWARF with dSYMto的改变DWARF不是一个好主意。你应该把它改回来,因为没有 dSYM 文件,无论如何你都不会得到符号(至少雪豹似乎是这种情况,我看到有报道说有些人也得到了没有 dSYM 文件的符号,但是,所有这些人正在使用狮子)。进行更改后,确保创建一个干净的构建(有时 Xcode 无法在我的系统上为非干净构建生成 dSYM 文件)。

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

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

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

这会导致 Spotlight 首先停止索引您的主硬盘驱动器,然后删除过去收集的所有索引数据,然后开始重新索引它。以上几行假设您的 dSYM 文件位于主硬盘驱动器上(而不是任何其他硬盘驱动器或网络卷,否则您必须将“/”替换为该卷的适当挂载点)。在重试之前,请给 Spotlight 一些时间重新索引。

于 2011-09-23T12:44:05.443 回答
1

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

打开 Instruments 的 Preferences,然后单击“dSYMs And Paths”选项卡。

偏好标签

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

将搜索路径添加到列表

于 2014-09-14T22:16:31.860 回答
0

这是我的环境...

  • XCode 8.2
  • Mac OS v10.12 Sierra

我在模拟器中运行时遇到了同样的问题,这让我抓狂,因为所有标准的首选修复程序都不起作用。

对我来说,将我的 iPad 插入 MacBook 并在我插入的 iPad 上针对所述应用程序运行仪器会话。Instruments 在 iPad 上运行时正确地象征了我的应用程序,然后当我断开 iPad 并稍后在模拟器中运行仪器时继续工作。

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

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

我不知道为什么会这样,但这是我在 Instruments 中丢失符号之前所做的唯一项目更改。

于 2017-05-18T20:46:02.150 回答