内存泄漏之如何使用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);
    
    再次运行,程序自动断点:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunkingYang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值