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

简介: 使用按键精灵+umdh定位内存泄露问题的方式 一、配置方法 1、 安装windbg版本,必须安装:X86 Debuggers And Tools-x86_en-us.msi 2、 安装windows相关pdb和客户端程序对应的pdb。

使用按键精灵+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

目录
相关文章
|
3月前
|
Java C++
动手实现内存泄漏检测组件
动手实现内存泄漏检测组件
34 1
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1127 0
iOS:项目中无用类检测和无用图片检测汇总
|
27天前
|
算法 编译器 C语言
【C/C++ 实用工具】内存泄漏与堆溢出检测工具一览
【C/C++ 实用工具】内存泄漏与堆溢出检测工具一览
20 0
|
8月前
cocoscreator查内存泄露,绘制内存监视器
cocoscreator查内存泄露,绘制内存监视器
156 0
内存清理、动画制作、CPU检测等五款实用软件推荐
人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。
253 0
内存清理、动画制作、CPU检测等五款实用软件推荐
程序人生 - 汽车后视镜锁车自动折叠为啥失灵?
程序人生 - 汽车后视镜锁车自动折叠为啥失灵?
91 0
程序人生 - 汽车后视镜锁车自动折叠为啥失灵?
|
存储 缓存 JSON
定位Flutter内存问题很难么?
flutter内存泄漏定位
2227 0
定位Flutter内存问题很难么?
|
Java Android开发
Android内存泄漏定位、分析、解决全方案
原文链接 更多教程 为什么会发生内存泄漏 内存空间使用完毕之后未回收, 会导致内存泄漏。有人会问:Java不是有垃圾自动回收机制么?不幸的是,在Java中仍存在很多容易导致内存泄漏的逻辑(logical leak)。
2147 0
|
Windows Go
堆内存破坏检测实战--附完整调试过程
首先解释一下,什么是堆内存? 堆是一种常见的内存管理器,应用程序通过堆来动态地分配和释放内存,通常使用堆的情况是无法预先知道所需要的内存大小,或者申请内存太大,无法通过栈内存来自动分配,下面让我们再来看一段英文解释。
1244 0