【问题标题】:Does Xcode's Debug Navigator work different from Instruments allocations?Xcode 的 Debug Navigator 的工作方式是否与 Instruments 分配不同?
【发布时间】:2019-03-04 22:42:45
【问题描述】:

我正在尝试在我的应用中查找内存问题。

当我使用 Xcode 的调试导航器解决内存问题时,我发现应用程序的整体使用量有所增加。对于特定的流程,当我来回走动时,我看不到内存被持久化。

但是,如果我使用 Allocations 执行相同的流程和工具,我确实看到每次来​​回都会有 3Mbs 持续存在。

Xcode 的调试导航器是否不可靠,或者他们正在测量不同的东西或其他东西?!

编辑:

所以我被告知差异是由于构建配置。好的。但是,如果我去“编辑方案”并将构建配置更改为“发布”并在我的设备上运行。然后我可以期望 Xcode 调试导航器工作相同吗?还是还有一些不同?如果有呢?

【问题讨论】:

  • 您在调试器和仪器中使用了哪些构建配置? Xcode 默认在调试器中运行调试版本并在 Instruments 中发布版本。调试和发布版本可能会导致不同的内存使用量。
  • 谢谢。我得去看看然后回复你。但这可能就是这样。现在您可以添加一个答案并为您刚才所说的内容添加参考吗?

标签: xcode memory-management memory-leaks allocation xcode-instruments


【解决方案1】:

Xcode 的调试导航器是否不可靠或者他们正在测量不同的东西

绝对是的!正如我在这里多次建议的那样(例如here),您必须永远从调试导航器仪表中得出真正的结论。在模拟器的调试版本中,内存分配的工作方式完全不同。如果您想知道您的应用程序的内存是如何工作的,您必须使用 Instruments 以便获得发布版本,并且您必须在设备上运行,以便您的内存使用情况反映实际情况。

但是如果我去“编辑方案”并将构建配置更改为“发布”...我可以期望 Xcode 调试导航器工作相同

绝对没有!发布意味着执行了各种编译器优化,使调试器几乎无法使用。但这没关系;你永远不会同时调试使用 Instruments 来测量任何东西。

【讨论】:

  • 我对我的问题做了一个小小的修改。可以再看一遍吗?
  • 是的,这样做了,没问题。
  • 谢谢。所以 Release + 调试器永远不会发生。虽然调试和仪器不会发生除非我去更改配置文件的构建配置。但这将是一件奇怪的事情。这是一个正确的总结吗?
  • 基本上正确的总结是,如果你在调试的时候调试,在分析的时候进行分析,那么正确的事情就会自动发生,因为它已经被苹果在工厂正确配置了。 :)
  • @matt 关于 OP 的第二个问题,当然,发布版本由于优化而使 debugger 更难使用,但这对内存图是否存在的问题有什么影响在 XCode 中运行发布构建时将匹配仪器中配置的相同发布构建?至少在这种情况下,我们不应该期望在给定时间的总内存量方面获得一致的结果吗?
【解决方案2】:

Xcode 的默认行为是在 Xcode 中运行项目时使用调试版本,在 Instruments 中分析项目时使用发布版本。调试和发布版本可能有不同的内存使用量。

您可以从 Xcode 的方案编辑器中检查和更改构建配置。

如果这不能解决您的问题,您将很难获得明确的答案。了解内部工作原理以及调试器和 Instruments 之间区别的人是 Apple 工程师。

【讨论】:

  • 你的意思是当我点击配置文件时,因为它通常设置为 release 模式然后它被认为是一个发布版本?这是有道理的
  • 是的,如果 Profile 步骤设置为使用 Release 构建配置,则它被视为发布构建。
  • 我对我的问题做了一个小小的修改。可以再看一遍吗?
  • Matt 打败了我。我没有其他要补充的。
  • 没关系。只是你的评论/答案是第一位的......所以赏金给你。接受的答案是他:D。我还有其他问题可以回答 :))) 包括一个有赏金的人
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 2011-11-18
  • 2012-07-18
  • 1970-01-01
  • 2013-08-25
  • 2012-04-08
  • 2013-03-10
  • 2012-06-23
相关资源
最近更新 更多