在Visual Studio 2013的更新2中, 内存诊断工具 为Windows应用商店和Windows Phone添加的,使开发人员能够监视实时内存消耗并获取应用程序的堆快照以供进一步分析。 visualstudio团队正在扩展现有的工具,以便在visualstudio的下一个主要版本中用于Windows桌面应用程序。 对于这个CTP,VisualC++团队对当前工具进行了一些改进,这些工具现在显示C++类型用于单个堆分配。
启动诊断会话
要启动内存诊断会话,请在“Debug”(调试)菜单中选择“Performance and Diagnostics”(性能和诊断),或只需按 Alt+F2键 . 这将带来VisualStudio诊断集线器,在这里您可以选择“内存使用”选项,该选项将当前默认为C++应用程序的本机内存,尽管托管和混合内存也通过内存工具的设置来支持。CTP中的内存工具不支持在同一会话期间使用其他性能工具,因此在启动内存诊断会话之前,请务必取消选择任何其他工具。 有关VisualStudio中其他性能和诊断工具的信息,请访问 丹·泰勒关于诊断中心的博客 .
启动会话将自动启动应用程序并显示实时内存消耗。 在会话期间,可以在不同的时间点对堆状态进行快照,以显示内存分配的相对增长和减少。
查看堆快照
停止会话将允许您打开快照并查看本机堆以及内存中的分配列表。 每个快照将以蓝色链接的形式显示分配的内存量和分配的数量。 对于第一个快照之外的快照,还有其他蓝色链接显示两个堆快照之间内存的相对差异(见下面的快照#2)。
单击快照中的任何链接都将打开带有两个视图的本机堆窗口。 页面顶部是调用堆栈中的帧列表,选择其中一个标识符将在下面部分显示与所选函数相关联的分配。 在下面的例子中,记忆中有五个火山物体代表华盛顿的主要层火山。 火山::火山构造器在堆栈框架的顶部窗口中被选中,为每个火山对象所做的分配列表在下面的“分配”窗口中列出。 列表按调用者或被调用者聚合,可在右上角选择。
堆调试
分析堆快照时,可以通过右键单击内存表中的任意位置并选择“查看堆内容”(如上所示)将调试器附加到快照。 调试器在堆分析中引入了一些强大的功能,包括对内存的表达式求值和分配的数据提示。
下面的动画演示了在本机调试堆的类型视图和实例视图之间导航,以及通过“转到定义”为火山类显示源代码。 最初,堆以对象类型列表的形式显示,对象类型在内存中的计数,选择一个类型将显示每个类型的实例列表。
选择当前类型的特定实例将在本机内存窗口下方的窗口中显示调用堆栈。 下面是 圣海伦斯山 火山体:
注:
- 类型仅显示源于从CTP的C++编译器编译的代码的分配,并且.PDB可用。
- 当在内存诊断会话期间打开Just My Code设置时,表达式求值将在堆调试期间失败。
- 这是预发布,可能会发生更改;这些工具还没有准备好用于生产。
有关在Visual Studio 2013 Update 2中诊断内存问题的指针,请参阅的“本机内存疑难解答”部分 哈里克里希纳·梅农的博客文章 它提供了如何使用这些工具修复Windows Phone应用程序中的内存泄漏的演练。
我们非常感谢您的反馈,并将考虑到这些工具的未来改进。 请让我们知道你的想法通过提交反馈或在线( 用户语音 , 连接 )或者通过VisualStudio右上角的“反馈”按钮( ). 谢谢!
*2014年6月9日更新: 向“启动诊断会话”部分添加了信息。