0


内存泄漏之如何使用Visual Studio的调试工具跟踪内存泄漏?

使用Visual Studio的调试工具跟踪内存泄漏是一个系统性的过程,主要包括启用内存泄漏检测、运行程序、分析内存使用情况以及定位泄漏源等步骤。

Visual Studio提供了多种方式来检测内存泄漏,你可以根据自己的需求选择合适的方法。

注意:下面两种方式需要VS使用Debug模式运行,否则无效

一、使用Visual Studio诊断工具

  • 1、运行Visual Studio,并打开并你的项目。
  • 2、在“调试”菜单中,选择“启动性能分析(A)”(VS2010)或“性能或诊断”(VS2013)亦或“性能探查器”(VS2022)(大家根据自己安装使用的编译器自行选择)(或使用快捷键Alt+F2)来启动诊断会话。在这里插入图片描述
  • 3、在诊断会话中,选择“内存使用率”选项(同样,大家根据自己安装使用的编译器自行找到对应选项),点击开始,即会启动应用程序,并观察内存的使用情况。

在这里插入图片描述

  • 4、点击“开始”,即会启动应用程序,并观察内存的使用情况。

在这里插入图片描述

  • 5、 分析内存使用情况- 在诊断会话中,观察“内存使用”标签页中的实时图表,注意内存使用量的变化趋势。- 如果图表显示内存使用量持续上升,并且没有合理的解释(如缓存或预期的数据增长),那么可能表明存在内存泄漏。
  • 6、定位泄漏源- 使用Visual Studio的内存分析器: - 你可以通过Visual Studio的内存分析器工具来跟踪程序在运行过程中分配和释放的内存。- 执行可能导致内存泄漏的操作后,查看分析结果,找出长时间存活且数量增长的对象。- 查看这些对象的类型、创建堆栈等信息,以定位代码中的泄漏源。

二、 使用CRT(C运行时)库函数

  • 1、在你的源代码中包含头文件<crtdbg.h>
  • 2、在程序的入口处调用_CrtSetDbgFlag函数,并设置_CRTDBG_ALLOC_MEM_DF_CRTDBG_LEAK_CHECK_DF标志来启用内存泄漏检测。 如:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

在这里插入图片描述

  • 3、如果存在申请内存后没有释放,则在程序退出时,会打印内存泄漏信息。 - 如果使用了CRT库函数进行内存泄漏检测,程序退出时会在输出窗口中打印出内存泄漏信息。- 你可以根据输出信息中的内存地址、大小和调用堆栈来定位泄漏源。
Detected memory leaks!
Dumping objects ->
C:\Users\\TestDemo\MFCApplication1\MFCApplication1\MFCApplication1Dlg.cpp(105):{339} normal block at 0x00E1AFE8,100 bytes long.
Data:<> CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.

在这里插入图片描述

  • 4、通过_CrtSetBreakAlloc函数增加内存泄漏位置自动断点 在上述步骤知道了内存异常模块位置为 339,所以_CrtSetBreakAlloc(339); 再次运行,程序自动断点:在这里插入图片描述

本文转载自: https://blog.csdn.net/y601500359/article/details/141251157
版权归原作者 SunkingYang 所有, 如有侵权,请联系我们删除。

“内存泄漏之如何使用Visual Studio的调试工具跟踪内存泄漏?”的评论:

还没有评论