尽管所有构建设置都相反,Xcode Instruments正在剥离符号

时间:2012-06-27 00:09:23

标签: xcode instruments symbols stripping

问题

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

描述

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

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

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

重现步骤

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

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

    回归

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

    1. 重新启动机器。

    2. 尝试其他Xcode项目

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

    4. 重新象征文书中的文件(在〜/ Library / blahBlahBlah中仔细选择正确的DSYM文件......)

    5. 最终笔记

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

7 个答案:

答案 0 :(得分:6)

我终于能够通过一种只是羞于核武器的方法来实现它的工作:

  1. 确保您当前的构建配置禁用所有符号剥离。确保你已经为你的发布配置做了这个,如果这是为仪器配置的那些。
  2. 从iOS设备删除应用程序。
  3. 重启iOS设备。
  4. 重启Mac(我完全不相信Xcode或Lion 以退出所有相关进程)。
  5. 启动Xcode,转到管理器>项目并删除受影响项目的派生数据。
  6. 清理您的项目。见鬼,为什么不呢?
  7. 建立和分析仪器。
  8. 为了清晰起见,请选择“仪器中的时间分析器”。
  9. 第一次运行将显示符号,但不要退出。让仪器运行!
  10. 重新标记Instruments中的文档,仔细导航到当前版本的正确dSYM文件。由于您已在步骤5中删除了派生数据,因此这应该更容易。
  11. 现在你应该可以看到你的符号了。如果你隐藏非Objective-C符号,它会有所帮助。
  12. 为什么我建议您删除应用并在步骤2和3中重启iOS设备?我怀疑Xcode没有执行每个构建的干净安装,但可能会安装增量,这样仪器中的符号地址是当前构建和以前构建的混合。如果是这样,那么对于像我这样在一台以上Mac之间共享一个测试设备的人来说,这个问题更为常见。这种假设可能非常不正确。

    如果以上步骤对您不起作用,请在评论中告诉我。我想在未来的某个时刻制作详细的雷达报告。

答案 1 :(得分:1)

我不确定它是否已在4.3中修复但这是4.2 seen here

中已知的问题

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

这会影响两者的项目:

  1. 为“配置文件”操作选择“释放”配置。 (默认)
  2. Strip Linked Product构建设置设置为“Yes”,或 自定义运行脚本构建阶段剥离产品。 (非默认)
  3. 解决方法是执行以下任一操作:

    1. 在启动配置文件之前,在产品上执行“清理” 动作。
    2. 清洁产品并暂时将条带连接起来 分析时产品构建设置为“否”。
    3. 将“配置文件”操作的配置设置为“调试”。
    4. 当您这样做时,直接从仪器内运行连续的配置文件 不需要重建。使用GC监视器开发Mac应用程序时 仪器中的模板可能会导致仪器崩溃。至 解决此问题请考虑将您的应用程序迁移到 ARC。

答案 2 :(得分:1)

我好几天都有类似的问题。我能够分析Debug配置,但不能发布。首先,我尝试制作发布配置的副本(如网络上的某处所示),但该副本也不起作用。

然后我制作了一份Debug,称为Profile,尝试了它,Profile的符号显示在探查器中。大!然后我将优化级别等更改为与Release相同,现在它可以工作!只是想分享这个,因为这个评论会让我免受伤害......

答案 3 :(得分:0)

一直面对同样的事情,偶然发现了这个主题。

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

探查器不知何故仍然指的是第一个构建(发布版本)的设置,因此它无法进行符号化。因此,我只是更改了应用程序的包标识符以进行测试,以便创建一个新的应用程序以进行性能分析。我现在可以查看存在泄漏的代码。

尝试一下,让我知道这是否也适合你。仍然在思考为什么乐器无法象征。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

即如果选择“文件”>“符号”,单击目标,然后找到名称相似的项目,则“二进制路径”显示为红色。

解决方案是转到仪器>首选项>符号,然后将/Users/<MY_USER>/Library/Developer/Xcode/DerviedData添加到搜索路径。 Library没有被Spotlight索引。完成此操作后,我至少有了我的应用程序的符号。在执行此操作时,我的应用程序名称旁边的小圆圈从黄色变为绿色,并且在重启仪器之间一直存在,与其他手动设置二进制文件的解决方案不同。

让我知道您能否告诉我如何为我的第三方框架获取所有这些。我将Carthage用于某些,其他则手动安装。还没有运气。

答案 6 :(得分:-1)

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

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

有时,XCode 4无法真正为完整开发添加设备。