一、基本用法

在LeakDiag中选择aaa.exe

然后选择Windows Heap Allocator来跟踪heap的使用,按start开始,等一会按log,然后再stop

会在c:\leakdiag\Logs下面生成一个log



关键的部分是

<LEAKS ver="1.25.28.2201">

<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,就能得到

<LEAKS ver="1.25.28.2201">

<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 “自动”检测内存泄露 (自动记录日志)的更多相关文章

  1. 在iOS上自动检测内存泄露

    手机设备的内存是一个共享资源.应用程序可能会不当的耗尽内存.崩溃,或者遭遇大幅度的性能降低. Facebook iOS客户端有很多功能,并且它们共享同一块内存空间.如果任何特定的功能消耗过多的内存,就 ...

  2. 检测内存泄露:Instruments中的Leaks

    前言 如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测. 现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如 ...

  3. Android内存泄露自动检测神器LeakCanary

    经典的面试题: a.怎样在coding过程中避免内存泄露? b.怎样检测内存泄露? 这两个问题我想大部分Android 职位面试时都会被问到吧. 怎样避免就不赘述了,网上很多答案. 工具呢,当然也有很 ...

  4. Qt应用中检测内存泄露——VLD

    本文简要描述一下在Qt应用中使用VLD来检测内存泄露.本次测试环境:QtCreator2.3 + Qt4.7.4-vs2008 + VS2008 Express. 1.下载并安装:VLD-2.2: h ...

  5. 使用新版Android Studio检测内存泄露和性能

    内存泄露,是Android开发者最头疼的事.可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴.  怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的 ...

  6. Android Studio检测内存泄露和性能

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 首先需要明白一个概念, 内存泄露就是指,本应该回收的内存,还驻留在内存中. 一般情况下,高密度的 ...

  7. Android DDMS检测内存泄露

    Android DDMS检测内存泄露 DDMS是Android开发包中自带工具,可以测试app性能,用于发现内存问题. 1.环境搭建 参考之前发的Android测试环境搭建相关文章,这里不再复述: 2 ...

  8. 使用LeakCanary检测内存泄露 翻译 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. Android自动检测版本及自动升级

    步骤: 1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName. 2.从服务器获取版本号(版本号存在于xml文件中) ...

随机推荐

  1. centos7 安装 mysql(在线安装)

    在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1 下载并安装MySQL官方的 Yum Re ...

  2. js es6遍历对象的6种方法(应用中推荐前三种)

        javaScript遍历对象总结 1.for … in 循环遍历对象自身的和继承的可枚举属性(循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).). 2.使用Object.keys ...

  3. 关于Java 8新引入语法特性的简要说明

    Java 8在语法上的主要改进就是新增了Lambda Expression以及Method Reference.由于官方网站的介绍稍显罗嗦,而且例子也有些复杂.我这里将提供一些更为浅显.直观的例子来帮 ...

  4. CentOS下yum安装jdk

    jdk安装极其简单,因为java应用太广泛.先看下系统中是否已安装,已安装了先卸载,没安装则直接通过yum一步到位安装即可. 1.看本机是否已有jdk # java -version -bash: j ...

  5. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_1.页面发布-需求分析

    先静态化,并存储到gridFS 然后,发消息给MQ,MQ接收到消息通知给所有监听他的Cms Client. Cms client从gridFS读取页面下载到自己的服务 业务流程如下:1.管理员进入管理 ...

  6. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_07-新增页面-前端-页面完善

    在新增页面加返回按钮 <el-button type="primary" @click="go_back" >返回</el-button> ...

  7. [ML] Linear Discriminant Analysis

    虽然名字里有discriminat这个字,但却是生成模型,有点意思. 判别式 pk 生成式 阅读:生成方法 vs 判别方法 + 生成模型 vs 判别模型 举例: 判别式模型举例:要确定一个羊是山羊还是 ...

  8. 用ConfigMap管理配置(10)

    一.ConfigMap介绍管理配置:   ConfigMap介绍 Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMa ...

  9. MR21修改标准价

    转自:https://blog.csdn.net/qq_21813647/article/details/79195731 物料帐下只有物料的状态是初始状态才允许修改价格. 如果状态为已输入数量和值也 ...

  10. CRLF——http response 拆分攻击(webgoat)

    0x01 什么是CRLF CRLF是“回车+换行”(\r和\n)/(%0d和%0a)的简称. CRLF利用: 正常输入的请求中加入恶意代码,控制HTTP响应header中的字符(Location,Se ...