使用按键精灵+umdh定位内存泄露问题的方式

原创
2016/06/26 17:50
阅读数 429

使用按键精灵+umdh定位内存泄露问题的方式

一、配置方法

1、 安装windbg版本,必须安装:X86 Debuggers And Tools-x86_en-us.msi

2、 安装windows相关pdb和客户端程序对应的pdb

a) 比如:F:\symbols下创建两个目录,windows存放操作系统pdbpdb目录存放播放器pdbPdb一定要与运行的播放器版本完全匹配,否则定位结果没意义

3、 配置环境变量

a) 将windbg的路径配置到path环境变量中

path=C:\Program Files\Windows Kits\8.0\Debuggers\x86

b) 配置umdh使用的symbols目录

添加_NT_SYMBOL_PATH

c) 配置gflags标记

在命令行输入gfalgs,按下图方式配置

gflags打开堆栈开关

 打开gflags中对应开关


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加载成功

umdh_result

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


展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部