Windows平台release版本内存泄漏检查办法
release版本内存泄漏的使用工具是Leakdiag
下载安装
下载地址:
链接:https://pan.baidu.com/s/1m_eJI3Iy-CNWLghpj5cyvw
提取码:qite
Leakdiag下载之后按照默认设置安装,否则好像是会出问题的。默认安装是直接装在C盘下。
Logs文件夹里边存储的就是记录的日志,我们则是通过启动leakdiag应用程序进行检测。
LeakDiag支持5种不同的分配:
1) Virtual Memory Allocator 虚拟分配。 这种分配可追踪用VirtualAlloc/ VirtualAllocEx 等关于虚拟内存分配的内存。此时,选择LeakDiag 上[Memory allocators] 选项的“Virtual Memory Allocator”来检测。
2)Windows Heap Allocator 堆分配。这种分配可追踪NTDLL.DLL中如下函数分配的内存。
· RtlCreateHeap,
· RtlDestroyHeap,
· RtlAllocateHeap,
· RtlFreeHeap,
· RtlReAllocateHeap,
· LocalReAlloc,
· LocalFree,
· LocalAlloc,
· LocalReAlloc,
· GlobalAlloc,
· GlobalReAlloc and
· GlobalFree
此时,选择LeakDiag 上[Memory allocators] 选项的“Windows Heap Allocator”来检测。
3) MPHeap Allocator 线程局部存储(Thread Local Storage,TLS指允许一个进程的多个线程存储每个线程所独有的数据的一种Win32 机制)分配。这种分配可追踪MSDART32.DLL中如下函数分配的内存。
· MPHeapAlloc,
· MPHeapFree and
· MPHeapReAlloc
此时,选择LeakDiag 上[Memory allocators] 选项的“MPHeap Allocator”来检测。
4) COM Allocator COM分配(外部和内部)。这种分配可追踪OLE32.DLL,OLEAUT32.DLL 中如下函数分配的内存。
· CoGetMalloc,
· CoTaskMemAlloc,
· CoTaskMemFree,
· CoTaskMemRealloc,
· CRetailMalloc_Alloc,
· CRetailMalloc_Free,
· CRetailMalloc_Realloc,
· SysAllocStringLen,
· SysAllocStringByteLen,
· SysAllocString,
· SysFreeString,
· SysReAllocString and
· SysReAllocStringLen
此时,选择LeakDiag 上[Memory allocators] 选项的“COM Allocator”或“COM Internal Allocator”来检测。
5) C Runtime Allocator C运行时分配。这种分配可追踪MSVCRT.DLL中如下函数分配的内存。
· malloc,
· calloc,
· realloc,
· free,
· new,
· new[],
· delete and
· delete[]
此时,选择LeakDiag 上[Memory allocators] 选项的“C Runtime Allocator”来检测。
测试内存泄漏过程
我的工程名字叫MFCTest,然后启动调试,会出现MFCTest.exe。
然后启动Leakdiag应用程序,见上图,我们首先在application里边找到MFCTest.exe,然后在Memory allocators这里选择Heap Allocator,因为内存泄漏主要是因为程序员申请了空间忘记释放,这些内存空间都是在堆区申请,所以查看堆区就好了。先按下start, 然后在MFCTest.exe 处理正常的业务操作,觉得程序已经把我们要检测的部分都跑好了, 我们点击Log按钮,此时如果有内存泄漏,会在Logs文件夹下 生成xml文件,最后可以按stop,至此操作结束。
测试的过程是MFCTest.exe 调用testDll.dll 的memoryvld 函数内存泄漏。
TESTDLL_API void memoryvld()
{
char *p = new char[100];
}
查看xml日志
在Logs目录里边出现了刚刚记录的xml文件;
看xml 分析可知是在f:\test\stdtest\testdll\testdll.cpp 文件的memoryvld函数 ,第76行出现问题。
再对比源码,真的是在此位置出现内存泄漏。见下图
Windows平台release版本内存泄漏检查办法相关推荐
- Windows平台下的内存泄漏检测
Windows平台下的内存泄漏检测 一.使用_CrtDumpMemoryLeaks定位内存泄露 添加对应的头文件 转储内存泄漏信息 程序任意点退出 指定调试信息输出 二.定位具体内存泄露位置 内存快照 ...
- Linux 下几款程序内存泄漏检查工具
Linux 下几款程序内存泄漏检查工具 chenyoubing | 发布于 2016-07-23 10:08:09 | 阅读量 93 | 无 写这篇博客的原因呢是因为自己在编写基于Nginx磁盘缓存管 ...
- linux c 代码分析工具,编程达人 分享几款Linux 下C/C++程序内存泄漏检查工具
1.内存管理是否正确(因为这个程序本身开辟很多内存空间进行缓存管理,同时这个程序程序本身就是基于C/C++开发的,内存管理机制一直是程序员头痛的东西) 2.程序的健硕性如何(服务器任何程序的基本要求就 ...
- 常用的内存泄漏检查工具
以下是一些常用的内存泄漏检查工具: 1. Valgrind:Valgrind是一种开源的内存调试和性能分析工具,可以检测内存泄漏.使用未初始化的内存.使用已释放的内存等问题. 2. AddressSa ...
- (Android Studio 3.0)Android Profiler内存泄漏检查
前提概要 内存泄漏是常见又重要的问题,针对这个问题谷歌在Android Studio 3.0中推出了Android Profiler.笔者此篇文章主要记录一下Android Profiler在内存泄漏 ...
- 【内存检测系列】window下windbg内存泄漏检查
文章目录 1.使用windbg中的umdh检查 1.1. 工具下载 1.2.环境配置 1.3.利用工具umdh(user-mode dump heap)分析 1.4.利用umdh创建heap快照 2. ...
- (转载)VC的内存泄漏检查
原文链接:https://blog.csdn.net/psbeond/article/details/99546363 日期: 2016-12-20 参考:MSDN:ms-help://MS.MSDN ...
- 显示测试模式Windows 7 内部版本7600的解决办法
问题描述: ========== 因为多种原因,一些用户在开机时桌面右下角会显示测试模式Windows 7 内部版本7600的水印信息.如下图: 原因: ========== 很多用户检查发现自己的W ...
- Linux平台下的内存泄漏检测
Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和 ...
- windows客户端性能测试之内存泄露检查工具umdh.exe
Umdh 是 Debugging Tools for Windows 中的工具,在windbg的安装目录内,UMDH主要通过分析比较进程的Heap Stack trace信息来发现内存泄露的. Umd ...
最新文章
- 文件监视器——Filemon
- 394. Decode String
- 第83天:jQuery中操作form表单
- 从IC设计来看Trace32的用途
- Pytorch超简单安装教程
- 前端面试题汇总(JS 基础篇)
- luogu2680 运输计划
- [转] python中的高效迭代器函数
- ovs ovn 学习资料
- 【渝粤题库】陕西师范大学800002 地球概论
- 【win10】设置电脑固定IP,解除固定IP
- 网易公开课 “可汗学院”《统计学》学习笔记
- java判断200以内的素数_java判断101-200之间的素数并输出
- 仿速度装机联盟程序源码,装机联盟程序源码 安装联盟程序源码
- 分布式微服务下的跨库查询解决思路
- 小型、低成本、低功耗的一次性收音机。第1部分:发射机
- 从麦当劳的管理谈品牌的细节塑造
- SpringSecurity(Web权限方案)
- 获取本机IP地址的方法
- 安全危机 破解U盘加密工具的加密原理