IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 使用umdh.exe 内存泄露分析 -> 正文阅读

[C++知识库]使用umdh.exe 内存泄露分析

1,安装

在安装完windbg之后,就会在windbg的目录下发现gflag.exe和umdh.exe 。

2,配置环境:

在环境变量中添加安装windbg的目录

3,配置gflag

打开gflag.exe,按照图中配置

4,开始检测

(1),打开命令符:提示win + r

(2),输入umdh,可以看看命令的意思

?(3)写一个测试程序:

	char* cc3 = NULL;
	for (int i = 0; i < 10000; i++)
	{
		std::cout << file_name2 << std::endl;
		cc3 = new char[1024];
		Sleep(200);
	}

?(4)设置_NT_SYMBOL_PATH:pdb的路径

set _NT_SYMBOL_PATH=H:/MyProcess/TestTChar/x64/Release;SRVf:\symbolshttp://msdl.microsoft.com/download/symbols

H:/MyProcess/TestTChar/x64/Release 是你测试程序的pdb
SRVf:\symbolshttp://msdl.microsoft.com/download/symbols 是微软的pdb,会下载到f:\symbol里面。

(5)启动测试程序

(6)生成节点文件

生成第一个时间节点分析文件

umdh ?-pn:newChar.exe -f:D:/FirstDump.txt

等待一段时间,newChar.exe运行ing

生成第二个时间节点分析文件

umdh -pn:newChar.exe -f:D:/SecondDump.txt

??(7)对比节点文件

将两次文件综得到最终分析文件

umdh D:/FirstDump.txt D:/SecondDump.txt -f:D:/Result.txt

(8)分析?

?

// Debug library initialized ...
a
	ntdll!LdrInitializeThunk+00000063
	ntdll!LdrInitializeThunk+0000000E

-    4608 (      0 -   4608)      0 allocs	BackTraceA9BECFC0
-       1 (      0 -      1)	BackTraceA9BECFC0	allocations

	ntdll!RtlAllocateHeap+00000AFD
	apphelp!SdbTagRefToTagID+00000B82
	apphelp!SdbPackAppCompatData+000011CD
	apphelp!SE_WINRT_HookObject+00004085
	apphelp!SE_WINRT_HookObject+00000F77
	apphelp!SdbFreeFileInfo+000009CC
	apphelp!SE_InstallBeforeInit+000002E4
	apphelp!SE_InstallBeforeInit+00000065
	ntdll!RtlQueryDepthSList+00000268
	ntdll!RtlQueryDepthSList+0000015B
	ntdll!LdrInitShimEngineDynamic+00003693
	ntdll!LdrInitializeThunk+000001DB
	ntdll!LdrInitializeThunk+00000063
	ntdll!LdrInitializeThunk+0000000E

-   10747 (      0 -  10747)      0 allocs	BackTraceA8378320
-      19 (      0 -     19)	BackTraceA8378320	allocations

	ntdll!RtlAllocateHeap+00000AFD
	ucrtbase!calloc_base+0000004E
	ucrtbase!wsetlocale+00000FC4
	ucrtbase!initialize_narrow_environment+00000074
	ucrtbase!initialize_narrow_environment+00000019
	ucrtbase!o__recalloc+00000150
	ucrtbase!msize+00000146
	ntdll!RtlActivateActivationContextUnsafeFast+0000011D
	ntdll!LdrGetProcedureAddressEx+000002D7
	ntdll!LdrGetProcedureAddressEx+0000006A
	ntdll!LdrGetProcedureAddressEx+000000F0
	ntdll!LdrGetProcedureAddressEx+000000F0
	ntdll!LdrGetProcedureAddressEx+000000F0
	ntdll!LdrInitShimEngineDynamic+000038DA
	ntdll!LdrInitializeThunk+000001DB
	ntdll!LdrInitializeThunk+00000063
	ntdll!LdrInitializeThunk+0000000E

-   14336 (      0 -  14336)      0 allocs	BackTraceA9D395E0
-      14 (      0 -     14)	BackTraceA9D395E0	allocations

	ntdll!RtlAllocateHeap+00000AFD
	ucrtbase!malloc_base+00000036
	TestTChar!operator new+0000001F (D:\agent\_work\13\s\src\vctools\crt\vcstartup\src\heap\new_scalar.cpp, 35)
	TestTChar!main+0000048A (H:\MyProcess\TestTChar\TestTChar\TestTChar.cpp, 53)
	TestTChar!__scrt_common_main_seh+0000010C (D:\agent\_work\13\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl, 288)
	KERNEL32!BaseThreadInitThunk+00000014
	ntdll!RtlUserThreadStart+00000021

-   26444 (      0 -  26444)      0 allocs	BackTraceA9BE8EC0
-       1 (      0 -      1)	BackTraceA9BE8EC0	allocations

	ntdll!RtlAllocateHeap+00000AFD
	ntdll!RtlSetEnvironmentVar+0000036F
	ntdll!RtlSetEnvironmentVariable+00000031
	apphelp!SdbPackAppCompatData+0000063B
	apphelp!Ordinal34+000021B4
	apphelp!SE_InitializeEngine+0000011D
	ntdll!RtlQueryDepthSList+0000014D
	ntdll!LdrInitShimEngineDynamic+00003693
	ntdll!LdrInitializeThunk+000001DB
	ntdll!LdrInitializeThunk+00000063
	ntdll!LdrInitializeThunk+0000000E


Total decrease == 113803 requested +  10293 overhead = 124096

TestTChar.exe是我们的测试程序,可以看到在这里H:\MyProcess\TestTChar\TestTChar\TestTChar.cpp, 53发生了内存泄漏,修改了就行

【注意】new的空间大一点,不然找不到

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:37:29  更:2022-04-28 11:38:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 21:40:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码