LeakDiag是微软一款检测memory leak的工具,使用比较简单

首先去下载一个ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag/

安装好,默认是在c:\leakdiag

然后写一个测试程序来测试

#include <stdio.h>
#include <windows.h>

int main()
{
    while(1)
    {
        char *c = new char[10];
        printf("%s",c);
        Sleep(1000);
    }
    return 0;
}

在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.

BTW: 据说有一个tool叫LDParser来分析leakdiag生成的log,哪位大侠有,希望提供一下,谢谢!

最新文章

  1. RegExp
  2. RMAN duplciate 准备时,需要检查的target数据库参数内容
  3. C#中的接口实现多态
  4. vundle按照YouComplete
  5. Maximal Square 我们都在寻找最高1子矩阵(leeCode)
  6. Codeforces Round #384 (Div. 2).C
  7. conda虚拟环境实践
  8. 【转】使用virtualenv在ubuntu上搭建python 3开发环境
  9. Java中实现多线程的四种方式
  10. CentOs7.5安装Redis
  11. (后端)Mybatis中#{}和${}传参的区别及#和$的区别小结(转)
  12. 13.vue组件
  13. C语言编程(多线程)
  14. docker核心概念(镜像、容器、仓库)及基本操作
  15. Block Design 小技巧之添加RTL代码到block_design
  16. c读入实型
  17. IOS HTTP访问端口
  18. BZOJ 3172 [Tjoi2013]单词 AC自动机Fail树
  19. 为CentOS系统配置防火墙设置
  20. c语言结构体可以直接赋值

热门文章

  1. 2017-2018-1 JaWorld 团队作业--冲刺5
  2. shell判断文件,目录是否存在或者具有权限的代码
  3. 百度语音识别vs科大讯飞语音识别
  4. Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理
  5. django网站
  6. vscode的keybindings.json 和 AHK 脚本映射Win键
  7. 实用性较强的idea插件
  8. UVA-10806 Dijkstra, Dijkstra. (最小费用流,网络流建模)
  9. @Column实体类中的使用(二十三)
  10. mysql中limit的用法详解[数据分页常用]