13

问题

Instruments 的 Time Profiler 正在从我的应用程序中删除除系统库之外的所有符号,尽管事实上我已在 Xcode 的所有相关构建设置中禁用了此行为 -但仅在一台开发机器上。另一台开发机器运行正常。

描述

Instruments 的 Time Profiler 正在剥离除系统库之外的所有符号,尽管事实上我已在 Xcode 的所有相关构建设置中禁用了此行为——但这仅发生在我的一台开发机器上。我有两台开发机器运行相同版本的 OS X、Xcode 和 Instruments,每台机器都使用相同 Xcode 项目的相同副本,具有相同的构建设置、方案和其他配置,并且应用程序使用相同的配置文件进行配置测试设备(iPhone 4S 最新公开版 iOS 5)。

机器 1
- Mac OS X
10.7.4 - Xcode 4.3.2 (4E2002)
- Instruments 4.3 (4321)

机器 2
- Mac OS X
10.7.4 - Xcode 4.3.2 (4E2002)
- Instruments 4.3 (4321)

重现步骤

  1. 在每台机器上打开包含的示例项目。
  2. 确保选择 iPhone 4S 作为测试设备。
  3. 选择产品 > 简介
  4. 当 Instruments 启动时,选择 Time Profiler 并继续。
  5. 运行应用程序。
  6. 请注意在 iMac(机器 1)上运行但在 MacBook Air(机器 2)上运行时符号是如何被剥离的。

预期行为

我自己的代码中的符号应该出现在两台机器上的 Time Profiler 中。

回归

我已经尝试了以下所有方法,但实际结果没有变化:

  1. 重新启动机器。

  2. 尝试其他 Xcode 项目

  3. 删除 Xcode Organizer 中所有项目的“派生数据”。

  4. 在 Instruments 中重新符号化文档(在 ~/Library/blahBlahBlah... 中仔细选择正确的 DSYM 文件)

最后的笔记

以下是示例项目的 .zip 文件的链接:示例项目 .zip

4

7 回答 7

7

我终于能够通过一种与核武器和铺路方案相提并论的方法使其工作:

  1. 确保为您当前的构建配置禁用所有符号剥离。如果这是为 Instruments 配置的内容,请确保您已为发布配置完成此操作。
  2. 从 iOS 设备中删除应用程序。
  3. 重新启动 iOS 设备。
  4. 重新启动 Mac(否则我根本不相信 Xcode 或 Lion会退出所有相关进程)。
  5. 启动 Xcode,转到 Organizer > Projects 并删除受影响项目的 Derived Data。
  6. 清理你的项目。见鬼,为什么不呢?
  7. Instruments 的构建和配置文件。
  8. 为清楚起见,选择 Instruments 中的 Time Profiler。
  9. 第一次运行不会显示符号,但不要退出。让仪器运行!
  10. 在 Instruments 中重新符号化文档,仔细导航到当前构建的正确 dSYM 文件。这应该更容易,因为您已在步骤 5 中删除了派生数据。
  11. 现在您应该可以看到您的符号了。如果您隐藏非目标 C 符号,它会有所帮助。

为什么我建议你在第 2 步和第 3 步中删除应用并重启 iOS 设备?我怀疑 Xcode 不会对每个构建执行全新安装,但可能会安装增量,这样 Instruments 中存在的符号地址是当前构建和以前构建的混合。如果是这样,那么对于像我这样在多个 Mac 之间共享单个测试设备的人来说,这个问题就更常见了。这个假设可能是非常不正确的。

如果上述步骤对您不起作用,请在评论中告诉我。我想在未来的某个时候创建​​一份详细的雷达报告。

于 2012-07-05T19:35:47.153 回答
1

我不确定它是否已在 4.3 中修复,但这是 4.2 中的一个已知问题,请参见此处

仪器 Xcode 4.2 中的 Profile 操作存在一个已知问题。在没有更改源文件的构建之后,Instruments 将无法为目标应用程序收集符号。

这会影响两个项目:

  1. 为 Profile 操作选择了 Release 配置。(默认)
  2. 剥离链接产品构建设置设置为“是”,或者自定义运行脚本构建阶段剥离产品。(非默认)

解决方法是执行以下任一操作:

  1. 在启动配置文件操作之前对产品执行“清洁”。
  2. 在进行分析时,对产品进行清理并临时将 Strip Linked Product 构建设置设置为“否”。
  3. 将 Profile 操作的配置设置为 Debug。
  4. 当您不需要重建时,直接从 Instruments 中运行连续的配置文件。在开发 Mac 应用程序时,使用 Instruments 中的 GC Monitor 模板可能会导致 Instruments 崩溃。要解决此问题,请考虑将您的应用程序迁移到 ARC。
于 2012-11-17T22:12:44.287 回答
1

这几天我遇到了类似的问题。我能够分析调试配置,但不能分析发布。首先,我尝试制作发布配置的副本(如网络上某处所建议的那样),但该副本也不起作用。

然后我做了一个Debug的副本,将其命名为Profile,试了一下,Profile的符号显示在profiler中。伟大的!然后我将优化级别等更改为与发布相同,现在它可以工作了!只是想分享这个,因为这个评论会节省我几个小时......

于 2013-01-03T16:23:16.287 回答
0

一直面临同样的问题并偶然发现了这个线程。

我意识到我首先使用发布版本对应用程序进行了分析,然后在 Xcode 中为同一应用程序更改了方案后,分析器仍然无法进行符号化。我已经尝试了您上面提到的所有明显的解决方案,但徒劳无功。

探查器不知何故仍在引用第一个构建(发布构建)的设置,因此它无法符号化。因此,我只是出于测试目的更改了应用程序的包标识符,以便完全创建一个新应用程序用于分析目的。我可以检查现在存在泄漏的代码。

试试看,让我知道这是否也适合你。仍在思考为什么 Instruments 无法象征性。

于 2012-07-04T07:49:42.397 回答
0

我有一个类似的问题,我从命令行构建的 os x 应用程序中没有符号(所以在这种情况下,它不是 iphone 或 xcode 问题)。原来问题是由于包含我的 PATH 的错误 DYLD_LIBRARY_PATH 造成的。当我摆脱所有那些非库路径(例如 /usr/bin/)时,它就起作用了。

于 2013-07-03T21:29:09.737 回答
0

我有很多第三方框架,不幸的是它们的符号和二进制文件丢失了。

此外,我的应用程序的二进制文件丢失了。

即,如果我选择文件 > 符号,单击我的目标,并找到类似名称的项目,二进制路径显示为红色。

解决方案是转到 Instruments > Preferences > Symbols,然后添加/Users/<MY_USER>/Library/Developer/Xcode/DerviedData到搜索路径。Library不被 Spotlight 索引。这样做之后,我至少有了我的应用程序的符号。当我这样做时,我的应用程序名称旁边的小圆圈会从黄色变为绿色,并且在重新启动仪器之间持续存在,这与手动设置二进制文件的其他解决方案不同。

如果你能告诉我如何为我的第三方框架获取所有这些,请告诉我。我将 Carthage 用于一些,其他手动安装。这些还没有运气。

于 2018-08-06T19:17:54.850 回答
-1

尝试打开 XCode 3 和他的 Organizer。并尝试从这个管理器添加一个设备到两台机器。

只需打开 Organizer 并等待他处理。如果您看到“用于开发”按钮,请单击他。

有时,XCode 4 无法真正添加设备以进行全面开发。

于 2012-06-27T00:30:04.380 回答