Umdh进行内存泄露分析软件的下载、安装与使用

news2024/11/24 5:33:04

1 下载与安装

1.1 软件介绍

Umdh一款轻量级的内存泄露分析工具UMDH(User-Mode Dump Heap),是 Debugging Tools for Windows 里面的一个工具,主要通过分析比较进程的Heap Stack trace信息来发现内存泄露。

Umdh内存泄露分析适用范围:

  • dll内存泄露
  • 长时间才出现的
  • 不易分析的内存泄露问题

1.2 软件下载

安装网址:【下载Windows驱动程序工具包...】

进入页面,如图所示:

选择“步骤2”下载SDK,操作步骤如图所示:

下载完成后,软件名称为:winsdksetup.exe,如图所示:

1.3 软件安装

选择并双击下载好的exe,弹出安装界面。选择第二个选项方便一会儿找到windbg的安装程序,点击next进入到下一步,如图所示:

这个页面不用管,直接点击next。

在这个页面选择需要用到的软件,umdh是对应的“Debugging Tools for Windows”,只勾选这个,点击next下载。

下载完成后可以看到对应目录下生成了一个文件夹“Windows Kits“,如图所示:

进入文件夹找到”Debuggers And Tools”安装程序,选择需要的版本进行安装。

安装完成后不会默认添加到桌面,可以搜索,找到exe位置添加快捷方式即可,如图所示:

Umdh wingbd 分析内存泄露

1.4 配置环境变量

变量名:_NT_SYMBOL_PATH

固定变量值:SRV*C:\Windows\symbols*http://msdl.microsoft.com/download/symbols

Umdh分析内存泄露需要启动进程,并找到对应进程.exe的pdb路径进行检测。如:abc.exe的pdb所在路径为“E:\work\abc\bin\Debug“,则配置应该为下图所示:

保存后便配置完成了。

2 使用umdh自动分析

自动分析需要使用cmd命令行来实现。

使用管理员权限启动cmd,输入以下命令进入到windbg.exe的目录中,如图所示:

cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64          // windbg 安装路径

输入要定位内存泄露的程序gflags.exe /i abc.exe +ust,如图成功后,开启abc.exe程序,如图所示:

gflags.exe /i 进程名.exe +ust            //添加要加载的进程

利用UMDH创建Heap快照,程序运行一段时间后或者程序占用内存增加时,然后再次创建heap快照,命令行无差别,snap1.log改为snap2.log或者其他。

umdh -pn: 进程名.exe -f:snap1.log          // snap1.log:快照名称,可改名,可设置路径,设置路径为:umdh -pn:OPCServer.exe -f:d:\Snap1.log 

使用分析差异命令,生成的result.txt文件在 命令行同目录下

umdh -d snap1.log snap2.log -f:result.txt         //比较两次快照的分析结果

生成完成后可以在文件夹下查看两个,如图所示:

打开报告文件“result.txt“搜索”memoryleak!“,如果存在内存泄露则可以搜索到结果,如图所示:

https://img-blog.csdn.net/20150805223426038?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

分析完成后查看结果result.txt,红色为umdh定位出来的泄露点,我们在查看源代码:

https://img-blog.csdn.net/20150805223435218?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

3 使用Windbg手动分析内存泄露

启动abc.exe,打开windbg,界面如图所示:

Attach到需要分析的进程:

命令:!heap –s查看当前进程运行的所有堆的情况

https://img-blog.csdn.net/20150805223442505?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

然后F5让程序运行一段时间或者内存有明显的增加时再次通过!heap –s查看当前堆的变化,如下图

https://img-blog.csdn.net/20150805223452563?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

通过对比前后两个堆的变化,发现0x012800000该地址的堆增加的很快而其他堆没什么变化,下面进一步定位

https://img-blog.csdn.net/20150805223502327?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

命令:!heap –stat –h 查看对应对的状态,发下该堆的内存基本被长度为0x424的块占用,接下来我们在堆中搜索该进程中哪些模块占用0x424长度内存,如下图

https://img-blog.csdn.net/20150805223509901?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

命令:!heap –flt s 424, 通过搜索程序内存中的堆发现长度为424的堆被大量的占用,进一步查看时谁在使用这个地址

https://img-blog.csdn.net/20150805223517167?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

找到泄露点了,红色部分的,如果程序对应的符号对应我们可以查看内存泄露点在哪一行

https://img-blog.csdn.net/20150805223524713?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 请求/actuator/beans 无法访问 返回404

问题复现 在保证项目加入了spring-boot-starter-actuator依赖,并成功启动后。通过浏览器进行访问,返回如下图结果: 问题排查 1. 查看日志 从日志中可以看到基于路径’/actuator’下只暴露了一个端点 2. 访问http://localhost:8080/actua…

【309. 买卖股票的最佳时机含冷冻期】

目录 一、题目解析 二、算法原理 三、代码实现 class Solution { public:int maxProfit(vector<int>& prices) {int nprices.size();vector<vector<int>> dp(n,vector<int>(3));dp[0][0]-prices[0];dp[0][1]0;dp[0][2]0;for(int i1;i<n;i){dp…

HTML的表单标签和无语义标签的讲解

HTML的表单标签 表单是让用户输入信息的重要途径, 分成两个部分: 表单域: 包含表单元素的区域. 重点是 form 标签. 表单控件: 输入框, 提交按钮等. 重点是 input 标签 form 标签 使用form进行前后端交互.把页面上,用户进行的操作/输入提交到服务器上 input 标签 有很多形态,能…

12V升压36V芯片,2A输出方案

12V升压36V芯片是一款专为EPC/笔记本车载适配器升压、升降压转换以及手持设备供电等应用领域设计的芯片。它具有12V升压至36V的功能&#xff0c;输出电流可达2A&#xff0c;采用外置MOS管&#xff0c;5V-35V的宽输入电压范围&#xff0c;参数特点包括高效率、宽输入电压范围、内…

基于GCC的工具objdump实现反汇编

一&#xff1a;objdump介绍 在 Linux中&#xff0c;一切皆文件。 Linux 编程实际上是编写处理各种文件的代码。系统由许多类型的文件组成&#xff0c;但目标文件具有一种特殊的设计&#xff0c;提供了灵活和多样的用途。 目标文件是包含带有附加地址和值的助记符号的路线图。这…

编译过程 学习 CMake 文档的前置知识

OHHHH&#xff0c;发现自己的基础知识真他妈的是呼呼漏风&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 尴尬得意识到&#xff0c;不仅是英语水平有问题&#xff0c;他码的基础知识…

在 Gorm 中学习分页和排序

一个全面的指南&#xff0c;教您在 GORM 中实现分页和排序&#xff0c;以实现高效的数据检索和展示 高效的数据检索和展示是应用程序开发的关键方面。GORM&#xff0c;强大的 Go 对象关系映射库&#xff0c;为开发人员提供了强大的工具来实现这一目标。在本指南中&#xff0c;…

【Mysql】模糊查询

目录 表&#xff1a; like用法 1.查询姓孙的王者荣耀英雄 ​编辑 2.查询姓孙&#xff0c;且名后面只有一个字的王者荣耀英雄 3.查询姓孙&#xff0c;且名后面有两个字的王者荣耀英雄 4.查询名字带 亮 的王者荣耀英雄 ​编辑 where...in...用法 1.查询id 为1&#x…

uni-app学习笔记(二)

目录 一、路由与页面跳转 1、tabar与普通页面跳转例子 2、navigateTo 3、switchTab 二、vue组件 1、传统vue组件的使用 2、easycom 三、uView组件库 1、安装配置 2、引入配置 3、使用 四、Vuex 1、认识 2、state基本使用 3、mapState使用 五、网络请求 1、封装…

MGEF 记录添加(物料主数据有一个存储区域的选项英文显示Haz. material number(危险物料号))

物料主数据有一个存储区域的选项英文显示Haz. material number&#xff08;危险物料号&#xff09;&#xff09; 看了一下对应的时MGEF-STOFF 刚开始在后台配置里面加好了需要的项目发现物料主数据还是选不到 找了半天&#xff0c;查了一堆资料。没有找到MGEF 是在哪里增加配置…

计算机毕业设计 基于Web的视频及游戏管理平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Vscode Vim自动切换

在VsCode里安装了Vim插件&#xff0c;由于Vim插件存在Normal和Insert两种模式&#xff0c;会需要经常性的按shift切换中英文&#xff0c;太过麻烦&#xff0c;本文介绍一下如何通过im-select来解决。 首先先确保自己的电脑里装有英文语言包&#xff0c;win10系统下可以使用Win…

树莓派连接打印机我都作了什么工作~

目录 前言1 安装系统2 修改一些设置3 安装更新了一些东西4 编辑DHCP配置文件5 CUPS网页设置6 最后后记参考链接 前言 为了给树莓派连接打印机&#xff0c;并将打印机共享到局域网中&#xff0c;参考了很多博文&#xff0c;也安照教程做了很多操作设置&#xff0c;但是由于参考的…

认证服务-SpringSecurity及Oauth2介绍

认证服务-SpringSecurity及Oauth2介绍 统一身份认证服务 统一身份认证服务系统&#xff1a;以统一身份认证服务为核心&#xff0c;用户登录统一身份认证服务后&#xff0c;即可以使用所有支持统一身份认证服务的管理应用系统。 统一认证服务的提供方在项目实施中通常由公司平…

Unity地面交互效果——5、角色足迹的制作

大家好&#xff0c;我是阿赵。   之前几篇文章&#xff0c;已经介绍了地面交互的轨迹做法。包括了法线、曲面细分还有顶点偏移。Shader方面的内容已经说完了&#xff0c;不过之前都是用一个球来模拟轨迹&#xff0c;这次来介绍一下&#xff0c;怎样和角色动作结合&#xff0c…

基于ssm的大学生社团管理系统

基于ssm的大学生社团管理系统 摘要 基于SSM的大学生社团管理系统是一个全面、高效的社团管理平台&#xff0c;旨在帮助大学生和社团管理员更方便、更快捷地进行社团活动的组织和管理。该系统基于Spring、SpringMVC和MyBatis&#xff08;简称SSM&#xff09;开发&#xff0c;这三…

IS-LM模型:从失衡到均衡的模拟

IS-LM模型&#xff1a;从失衡到均衡的模拟 文章目录 IS-LM模型&#xff1a;从失衡到均衡的模拟[toc] 1 I S − L M 1 IS-LM 1IS−LM模型2 数值模拟2.1 长期均衡解2.2 政府部门引入2.3 价格水平影响2.4 随机扰动因素 1 I S − L M 1 IS-LM 1IS−LM模型 I S − L M IS-LM IS−LM是…

JVM GC 垃圾收集器

文章目录 System.gc()内存溢出&#xff08;OOM&#xff09;OOM 的原因 内存泄漏垃圾回收的并行与并发安全点与安全区域 Java 中的引用分类强引用&#xff08;Strong Reference&#xff09;软引用&#xff08;Soft Reference&#xff09;弱引用&#xff08;Weak Reference&#…

设计模式是测试模式咩?

设计模式和测试模式概述 软件的生命周期为什么要进行测试&#xff08;测试的目的&#xff09;&#xff1f;软件的设计模式1. **瀑布模型**3. 增量和迭代模型4. 敏捷模型5. 喷泉模型 测试模型V模型W模型 一个应用程序从出生到“死亡”会经过非常漫长的流程…… 软件的生命周期 …