我有一个用C ++编写的XCode程序。
有些构建我的内存消耗不可避免地涌现,而其他构建内存保持不变并按预期工作。
是否有内置的XCodes调试功能允许我根据每个变量或每个对象查看内存消耗?
提前致谢。
答案 0 :(得分:0)
您应首先考虑使用Instruments(wiki)。您可以使用⌘ + I 在Xcode中运行Instruments。它建立在DTrace之上。
DTrace背景
为什么这很重要?通过DTrace,您可以在调试或生产过程中询问有关应用程序运行时行为的非常有趣的特定问题。
DTrace的优点在于提供程序,以及脚本(用D脚本语言编写 - 与dlang不同)。许多语言都有DTrace提供程序,允许您探测其标准库。还有一个系统调用提供程序,可让您查看应用程序何时进入较低级别的系统调用。某些第三方应用程序具有自己的特定于应用程序的DTrace提供程序,通常还有您可以使用的便捷脚本。或者您可以创建自己的(见下文)。
Objc / C ++复习
请记住,Objective-C和C ++基本上与C共存并扩展C.因此,C ++中的new
和delete
实际上只是malloc
和free
根据您正在使用的课程为您完成一些大小计算。在Objective-C中,它或多或少是相同的故事 - 事情必须malloc
到堆上。因此,无论您是在编写C,C ++还是Objective-C代码(甚至是Swift代码!),我们都可以依赖这些共同点。
<强>仪器强>
回到手头的问题,Instruments通过提供一个带有方便的预制脚本快捷方式的GUI,简化了使用DTrace的过程。你甚至不必看脚本。例如,您可以启动Instruments并告诉它监视内存分配或泄漏,然后突然您会在应用程序中获得内存使用情况的滚动图。
启动Instruments并开始使用Memory Allocation工具录制会话后,您应该查看“persistent bytes”列(以前是“live bytes”)。这是一个很好的起点。这个数字会增加和减少。您通常会看到随着时间的推移净增长,但是每当您预期发生重新分配时,您应该会看到它减少 - 重新分配越大,就越容易注意到。如果你没有在那些时刻看到减少,那么你将需要探索代码以进行糟糕的内存管理。
进一步
您甚至可以创建custom probes。
这是另一篇深度文章,用tracking malloc/free usage from specific lines of your code描述了你所谈论的内容。