windows平台两种内存泄漏分析工具
摘要
C/C++程序员具有直接操作内存的权力,但这也对程序员提出高要求,尤其是要小心内存泄露。可是内存泄漏发生时,也不要怕,windows平台gflags和vs是分析内存泄露的上好工具。
gflags分析内存泄漏
使用步骤
- cmd 进入到gflags的文件夹
- 设置pdb路径
- 设置被监控的程序
- 启动软件
- 创建快照
- 程序运行一段时间
- 再次创建快照
- 比较两次的差异
实际使用场景
- 启动软件
- 创建一个启动分析的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
- 运行程序使内存增长
- 创建一个结束分析的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
- 结果分析
打开result.txt文件
- 1292 : 两次内存快照之间的内存泄露值
- 1748 : 第二次快照时内存块大小
- 456 : 第一次快照时内存块大小
- 17 : 两次快照间内存被分配的次数
- 23: 第二次快照时内存分配的次数
- 6: 第一次快照时内存分配的次数
- d:\memoryleak\main.cpp, 13 : 内存泄露代码所在文件及其行数,确系源码分配内存的位置
vs分析内存泄漏
操作步骤
-
打开性能探测器
-
勾选内存使用率
-
开启性能探测器
-
截取快照
-
运行一段时间再次截取快照
-
第5步可以重复多次
-
停止收集
-
查看分析报告