使用按键精灵+umdh定位内存泄露问题的方式
一、配置方法
1、 安装windbg版本,必须安装:X86 Debuggers And Tools-x86_en-us.msi
2、 安装windows相关pdb和客户端程序对应的pdb。
a) 比如:F:\symbols下创建两个目录,windows存放操作系统pdb, pdb目录存放播放器pdb。Pdb一定要与运行的播放器版本完全匹配,否则定位结果没意义
3、 配置环境变量
a) 将windbg的路径配置到path环境变量中
path=C:\Program Files\Windows Kits\8.0\Debuggers\x86
b) 配置umdh使用的symbols目录
c) 配置gflags标记
在命令行输入gfalgs,按下图方式配置
4、 按键精灵配置
a) 录制脚本。注意脚本必须是从初始页面开始最终回到初始界面。(比如从登陆页面开始,经过一系列操作后,最终回到登陆界面。)
b) 录完,双击脚本,在最后增加以下几行内容,catch_memory_snapshot.bat参考下面的附件。注意,例子里是将bat脚本放到D:\umdh目录下。脚本里抓取的快照也是存放在D:\umdh目录下的。
Delay 1883 RunApp "D:\umdh\catch_memory_snapshot.bat" Delay 5000 |
看上去像这样
5、 验证配置结果是否正确
使用umdh命令对比两次快照结果。
umdh 2015-05-09-17-14.txt 2015-05-09-17-21.txt -f:result.txt
二、查看result.txt的结果
1) 能看到pdb加载成功
2) 能定位到代码行位置
三、附件
供按键精灵调用的脚本catch_memory_snapshot.bat,功能定时抓取内存信息生成对比信息
for /f "tokens=1,2,3 delims=/-" %%a in ('date /t') do ( set yyyy=%%a set mm=%%b set dd=%%c ) set Date=%yyyy:~-4%-%mm%-%dd:~0,2% Time=`time /t` ::格式为Year-Month-Day-Hour-Minute if "%Time:~0,1%" neq " " ( set DateTime=%Date%-%Time:~0,2%-%Time:~3,2%) else ( if "%Time:~1,1%" neq " " ( set DateTime=%Date%-0%Time:~1,1%-%Time:~3,2%) else ( set DateTime=%Date%-%Time:~0,2%-%Time:~3,2% )) umdh -pn:iexplore.exe -f:D:\\umdh\\%DateTime%.txt