windows平台两种内存泄漏分析工具

1,823 阅读2分钟

摘要

C/C++程序员具有直接操作内存的权力,但这也对程序员提出高要求,尤其是要小心内存泄露。可是内存泄漏发生时,也不要怕,windows平台gflags和vs是分析内存泄露的上好工具。

gflags分析内存泄漏

使用步骤

  1. cmd 进入到gflags的文件夹
  2. 设置pdb路径
  3. 设置被监控的程序
  4. 启动软件
  5. 创建快照
  6. 程序运行一段时间
  7. 再次创建快照
  8. 比较两次的差异

实际使用场景

  1. 启动软件
  2. 创建一个启动分析的bat脚本,并运行
cd C:\Program Files (x86)\Debugging Tools for Windows (x86)  //step1
set _NT_SYMBOL_PATH=XXXX  //step2,XXX为exe所在文件夹的路径
gflags -i XXXX.exe +ust  //step3,被监控的软件
umdh -pn:XXXX.exe -f:d:\Snap1.log  //step5, 创建快照
pause
  1. 运行程序使内存增长
  2. 创建一个结束分析的bat脚本
cd C:\Program Files (x86)\Debugging Tools for Windows (x86)  //step1
set _NT_SYMBOL_PATH=XXXX  //step2,XXX为exe所在文件夹的路径
umdh -pn:XXXX.exe -f:d:\Snap2.log  //step7, 再次创建快照
umdh -d D:\Snap1.log D:\Snap2.log -f:d:\result.txt //step8,分析两次差异,结果在result.txt中
pause
  1. 结果分析
    打开result.txt文件

内存分析结果.png

  • 1292 : 两次内存快照之间的内存泄露值
  • 1748 : 第二次快照时内存块大小
  • 456 : 第一次快照时内存块大小
  • 17 : 两次快照间内存被分配的次数
  • 23: 第二次快照时内存分配的次数
  • 6: 第一次快照时内存分配的次数
  • d:\memoryleak\main.cpp, 13 : 内存泄露代码所在文件及其行数,确系源码分配内存的位置

vs分析内存泄漏

操作步骤

  1. 打开性能探测器 打开性能探测器.jpg
  2. 勾选内存使用率
  3. 开启性能探测器

开启性能探测器.jpg 4. 截取快照 5. 运行一段时间再次截取快照 6. 第5步可以重复多次 7. 停止收集

关闭性能探测器.jpg 8. 查看分析报告

性能探测器分析内存.jpg