在Windows中 , 如何用leakdiag “自动”检测内存泄露 (自动记录日志)
一、基本用法
在LeakDiag中选择aaa.exe
然后选择Windows Heap Allocator来跟踪heap的使用,按start开始,等一会按log,然后再stop
会在c:\leakdiag\Logs下面生成一个log
关键的部分是
<STACK numallocs="05" size="048" totalsize="0240"><!--内存分配的“总”大小->
<STACKSTATS>
<SIZESTAT size="048" numallocs="05"/><!--内存每次分配的大小和次数-->
<HEAPSTAT handle="340000" numallocs="05"/>
</STACKSTATS>
<FRAME num="0" dll="aaa.exe" function="" filename="" line="" addr="0x407a72" offset="0x00007A72" />
<FRAME num="1" dll="aaa.exe" function="" filename="" line="" addr="0x402ff2" offset="0x00002FF2" />
<FRAME num="2" dll="aaa.exe" function="" filename="" line="" addr="0x402df9" offset="0x00002DF9" />
<FRAME num="3" dll="aaa.exe" function="" filename="" line="" addr="0x402dd6" offset="0x00002DD6" />
<FRAME num="4" dll="aaa.exe" function="" filename="" line="" addr="0x40112f" offset="0x0000112F" />
<FRAME num="5" dll="aaa.exe" function="" filename="" line="" addr="0x401038" offset="0x00001038" />
<FRAME num="6" dll="aaa.exe" function="" filename="" line="" addr="0x401269" offset="0x00001269" />
<FRAME num="7" dll="KERNEL32.dll" function ="GetSortTablesFileInfo" offset="0xC" filename="" line="" addr="0x7C5989D5" />
<STACKID>00524008</STACKID>
</STACK>
</LEAKS>
其中numallocs是分配的次数,size是每次分配的大小,frame则是leak的时候的call stack
这里的stack只显示了binary,是因为symbol没有配好
把对应的pdb文件路径加到[Tools]-[Option]-Symbol search path,就能得到
<STACK numallocs="06" size="048" totalsize="0288">
<STACKSTATS>
<SIZESTAT size="048" numallocs="06"/>
<HEAPSTAT handle="340000" numallocs="06"/>
</STACKSTATS>
<FRAME num="0" dll="aaa.exe" function ="_heap_alloc_base" offset="0xC2" filename="malloc.c" line="200" addr="0x407A72" />
<FRAME num="1" dll="aaa.exe" function ="_heap_alloc_dbg" offset="0x1A2" filename="dbgheap.c" line="378" addr="0x402FF2" />
<FRAME num="2" dll="aaa.exe" function ="_nh_malloc_dbg" offset="0x19" filename="dbgheap.c" line="248" addr="0x402DF9" />
<FRAME num="3" dll="aaa.exe" function ="_nh_malloc" offset="0x16" filename="dbgheap.c" line="197" addr="0x402DD6" />
<FRAME num="4" dll="aaa.exe" function ="operator new" offset="0xF" filename="new.cpp" line="24" addr="0x40112F" />
<FRAME num="5" dll="aaa.exe" function ="main" offset="0x28" filename="D:\Test\aaa\test.cpp" line="8" addr="0x401038" />
<FRAME num="6" dll="aaa.exe" function ="mainCRTStartup" offset="0xE9" filename="crt0.c" line="206" addr="0x401269" />
<STACKID>00524008</STACKID>
</STACK>
</LEAKS>
由test.cpp line 8引起的memory leak.
二、自动检测内存泄露配置
打开leakdiag的安装目录,找到autodiag.ini 把原来的东西删掉,改为下面内容。
[DLPlayer.exe]
;AutoStart entries
EnableAutoStart=1
AutoStartDelay=0
AutoStartAllocator=2
;AutoDump entries
EnableAutoDump=1
AutoDumpInterval=1
AutoDumpOnShutdown=1
;AutoDetect entires
;EnableAutoDetect=0
;HowMuchIsALeak=0
;OverHowMuchTime=0
;HowLongToWaitBeforeLogging=0
几个重要参数的含义
DLPlayer.exe :表示你要检测的应用的名字
AutoStartDelay=0 表示程序运行0分钟后开始记录日志
AutoStartAllocator=2 表示Menory allocator 为windows Heap Allocator
AutoDumpInterval=1 表示每隔1分钟记录一次日志
(注 “ ; ”符号的含义是注释,相当于C语言里的“ // ”)
设置好了后,先启动要检测的程序,再启动leakdiag,点击start, 这样就不需要手动点击log了,系统会自动帮你记录。
三、 内存增长查看【可视化】
1. 下载LDGraher ,点击file-> openfiles 选中要打开的log文件, log文件的目录可以在leakdiag的配置中查看
2. 双击图中的红线,可以查看具体发生泄露的函数。
在Windows中 , 如何用leakdiag “自动”检测内存泄露 (自动记录日志)的更多相关文章
- 在iOS上自动检测内存泄露
手机设备的内存是一个共享资源.应用程序可能会不当的耗尽内存.崩溃,或者遭遇大幅度的性能降低. Facebook iOS客户端有很多功能,并且它们共享同一块内存空间.如果任何特定的功能消耗过多的内存,就 ...
- 检测内存泄露:Instruments中的Leaks
前言 如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测. 现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如 ...
- Android内存泄露自动检测神器LeakCanary
经典的面试题: a.怎样在coding过程中避免内存泄露? b.怎样检测内存泄露? 这两个问题我想大部分Android 职位面试时都会被问到吧. 怎样避免就不赘述了,网上很多答案. 工具呢,当然也有很 ...
- Qt应用中检测内存泄露——VLD
本文简要描述一下在Qt应用中使用VLD来检测内存泄露.本次测试环境:QtCreator2.3 + Qt4.7.4-vs2008 + VS2008 Express. 1.下载并安装:VLD-2.2: h ...
- 使用新版Android Studio检测内存泄露和性能
内存泄露,是Android开发者最头疼的事.可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴. 怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的 ...
- Android Studio检测内存泄露和性能
韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 首先需要明白一个概念, 内存泄露就是指,本应该回收的内存,还驻留在内存中. 一般情况下,高密度的 ...
- Android DDMS检测内存泄露
Android DDMS检测内存泄露 DDMS是Android开发包中自带工具,可以测试app性能,用于发现内存问题. 1.环境搭建 参考之前发的Android测试环境搭建相关文章,这里不再复述: 2 ...
- 使用LeakCanary检测内存泄露 翻译 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Android自动检测版本及自动升级
步骤: 1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName. 2.从服务器获取版本号(版本号存在于xml文件中) ...
随机推荐
- TPCH测试工具
TPC现有的测试标准为:TPC-E.TPC-C.TPC-H.TPC-App.根据这4个测试基准,目前TPC主要包括的4个技术小组委员会:TPC-E 技术小组委员会.TPC-C 技术小组委员会.TPC- ...
- shell 變數
echo $? 上个命令的退出状态,或函数的返回值. ref: http://c.biancheng.net/cpp/view/2739.html
- JAVA 基础编程练习题24 【程序 24 根据输入求输出】
24 [程序 24 根据输入求输出] 题目:给一个不多于 5 位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. package cskaoyan; public class cskaoya ...
- [C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)
1 Dijkstra算法 1.1 算法基本信息 解决问题/提出背景 单源最短路径(在带权有向图中,求从某顶点到其余各顶点的最短路径) 算法思想 贪心算法 按路径长度递增的次序,依次产生最短路径的算法 ...
- 二进制安装k8s-单个master节点、两个node--修改版--有个错误:好多地方确少APISERVER
centos7.4安装k8s-.11版本,二进制 安装 配置系统相关参数 如下操作在所有节点操作 # 临时禁用selinux # 永久关闭 修改/etc/sysconfig/selinux文件设置 s ...
- 推荐一个加载动图的网站loading.io
推荐一个非常好玩的loading gif的资源网站:https://loading.io/ 里面有各种loading的动图.
- MySQL问题:Access denied for user 'mysql'@'localhost'
deep@deep-PC:~$ sudo mysql -uroot -p mysql> update mysql.user set authentication_string=PASSWORD( ...
- opc 带有session
现在使用java来做工控系统的几种方式: 知识储备: 一.OPC Server端目前常见的有以下几种协议: 参考博客:https://www.cnblogs.com/ioufev/articles/9 ...
- AWK---linux系统三剑客(三)
grep .sed.awk被称为linux中的"三剑客". grep 更适合单纯的查找或匹配文本 sed 更适合编辑匹配到的文本 awk 更适合格式化文本,对文本进行较复杂格式 ...
- redis-5.0.3 redis.conf详解
# Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...