前言
在linux平台中可以采用valgrind进行动态内存诊断分析(具体参见博文:Valgrind工具检测内存错误实例分析),这里介绍一种在Windows平台下进行内存分析的工具: WinDbg。
1、WinDbg安装
WinDbg32位下载地址:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools
2、环境配置
计算机——》右击——》属性——》高级系统设置——》环境——》系统变量——》Path——》编辑——》变量值处后加入:
C:\Program Files\Debugging Tools for Windows(x86)
注意:此路径请参考个人的安装路径。
3、利用工具umdh(user-mode dump heap)分析
(1)由于在安装路径下有 gflags.exe、umdh.exe 这两个可执行文件,且在步骤2中已加入环境变量,下一步可直接在dos界面输入命令;
(2)桌面左下角-》开始 处输入cmd命令,打开dos界面窗口后,输入命令:gflags.exe,会出现下图,并按照下图进行相关设置:
(3)gflags标志设置好后,开启cmd
gflags.exe /i memoryleak.exe +ust
键入要定位内存泄露的程序gflags.exe /I memroyleak.exe(程序名称)+ust
如图成功后,开启memoryleak.exe程序,即运行需要测试的程序。
4、利用umdh创建heap快照
命令格式:umdh–pn:memoryleak.exe(程序名称) –f:snap1.log(日志名称)
程序运行一段时间后或者程序占用内存增加时,将memoryleak.exe退出。
然后再次创建heap快照,命令行无差别,snap1.log改为snap2.log或者其他。
设置好程序的符号路径,如下图:
设置好后可以开始分析heap前后两个快照的差异
分析差异命令:umdh –d snap1.log snap2.log –f:result.txt
分析完成后查看结果result.txt,可以指定具体的输出文件夹,不指定的话,输出在桌面的个人文件夹《以自己名字命名的文件夹》
红色为umdh定位出来的泄露点,我们在查看源代码
这样我们就可以修改代码中内存泄露的地方了。
注意:利用Umdh创建Heap快照 步骤设置程序的符号路径,此符号路径是一个在线网址,因此需要电脑联网;对于我们来说只能通过下载符号离线包的方式,离线包的路径为:
https://developer.microsoft.com/en-us/windows/hardware/download-symbols
关键词:Download Windows Symbol Packages
但是不下载此包,符号路径会自动设置为 %windir%\symbols 即windows自带的符号路径,目前未发现问题
5、常用命令
https://blog.csdn.net/SoaringLee_fighting/article/details/80514344
https://blog.csdn.net/SoaringLee_fighting/article/details/79089237
参考:
http://blog.csdn.net/chenyujing1234/article/details/11918987
http://blog.csdn.net/listener51/article/details/78106185
THE END!
本博文只能阅读,谢绝转载,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com