1.简单配置
在windbg程序目录下有个gflags.exe,运行后设置:

运行CMD.EXE,输入"D:\Debugging Tools for Windows (x86)\gflags.exe" /i test.exe +ust,如果设置成功则显示:

如果设置失败,说明注册表被禁用了,可以尝试解除所有对注册表的禁用。这个注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,命令“gflags.exe /i test.exe +ust”实际上就是在该路径下创建一个子键“test.exe”并创建一个名为GlobalFlag内容为0x00001000的REG_DWORD值。
参考:http://support.citrix.com/article/CTX106970

我起初的时候也设置失败了,后来发现是360的一个服务禁止了对上述注册表的操作,卸载之后就行了。

2.关于符号
如果符号不全或者不正确,也不能使用该方法侦测内存泄露的位置。如果真机系统符号不全(如xp sp3),可以在虚拟机中侦测。

3.具体实例
例如内存泄露:
Detected memory leaks!
Dumping objects ->
e:\vs工程\tests\testsdlg.cpp(101) : {118} normal block at 0x003BBAD8, 100 bytes long.
Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.

!heap -x 0x003BBAD8

Entry     User      Heap      Segment       Size  PrevSize  Unused    Flags
-----------------------------------------------------------------------------
003bbab0  003bbab8  003b0000  003b0640        a0      17f0        18  busy extra fill

!heap -p -a 003bbab0

address 003bbab0 found in
_HEAP @ 3b0000
HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state
003bbab0 0014 0000  [07]   003bbab8    00088 - (busy)
Trace: 0357
7c98eed2 ntdll!RtlDebugAllocateHeap+0x000000e1
7c96b394 ntdll!RtlAllocateHeapSlowly+0x00000044
7c938f21 ntdll!RtlAllocateHeap+0x00000e64
1024db9c MSVCR80D!malloc_base+0x000000ec
1020faa5 MSVCR80D!malloc_dbg+0x000002d5
1020f839 MSVCR80D!malloc_dbg+0x00000069
1020f7ef MSVCR80D!malloc_dbg+0x0000001f
78332934 MFC80UD+0x00052934
783329b8 MFC80UD+0x000529b8
78332396 MFC80UD+0x00052396
4129ae tests!CtestsDlg::OnInitDialog+0x0000013e
7839bfae MFC80UD+0x000bbfae
77d18734 USER32!InternalCallWinProc+0x00000028
77d2413c USER32!UserCallDlgProcCheckWow+0x000000f0
77d23b30 USER32!DefDlgProcWorker+0x000000a8
77d23d5c USER32!DefDlgProcW+0x00000022
77d18734 USER32!InternalCallWinProc+0x00000028
77d18816 USER32!UserCallWinProcCheckWow+0x00000150
77d2a013 USER32!CallWindowProcAorW+0x00000098
77d2a039 USER32!CallWindowProcW+0x0000001b
7835e302 MFC80UD+0x0007e302
7835cb1b MFC80UD+0x0007cb1b
7839d393 MFC80UD+0x000bd393
7835fbf7 MFC80UD+0x0007fbf7
7835f3b0 MFC80UD+0x0007f3b0
7835c9be MFC80UD+0x0007c9be
7835ceb4 MFC80UD+0x0007ceb4
78358979 MFC80UD+0x00078979
77d18734 USER32!InternalCallWinProc+0x00000028
77d18816 USER32!UserCallWinProcCheckWow+0x00000150
77d2927b USER32!SendMessageWorker+0x000004a5
77d2651a USER32!InternalCreateDialog+0x000009df

其中4129ae 地址就是分配内存的地方,从而导致的内存泄露。

http://support.microsoft.com/kb/268343/zh-cn

强大的windbg定位内存泄露,两句命令搞定!的更多相关文章

  1. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  2. 对百度WebUploader的二次封装,精简前端代码之图片预览上传(两句代码搞定上传)

    前言 本篇文章上一篇: 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传) 此篇是在上面的基础上扩展出来专门上传图片的控件封装. 首先我们看看效果: 正文 使用方式同 ...

  3. css两句话搞定漂亮表格样式

    CSS代码: table { background-color:#c0de98; width:500px; height:100px; } td { background-color:#ffffff; ...

  4. umdh windbg分析内存泄露

    A.利用工具umdh(user-mode dump heap)分析:此处以程序MemoryLeak.exe为例子 1.开启cmd 键入要定位内存泄露的程序gflags.exe /i memroylea ...

  5. FastMM 定位内存泄露的代码位置

    FastMM 定位内存泄露的代码位置 开源的FastMM,使用很简单,在工程的第一行引用FastMM4即可(注意,一定要在第一个Uses的位置),可以在调试程序时提示内存泄露情况,还可以生成报告. 在 ...

  6. 利用linux的mtrace命令定位内存泄露(Memory Leak)

    一谈到内存泄露, 多数程序猿都闻之色变. 没错, 内存泄露非常easy引入. 但非常难定位.  以你我的手机为例(如果不常常关机). 如果每天泄露一些内存, 那么開始的一个星期, 你会发现手机好好的. ...

  7. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查

    前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打 ...

  8. IOS 一句代码搞定启动引导页

    前言引导页,一个酷炫的页面,自从微博用了之后一下就火起来了,对于现在来说一个app如果没有引导页似乎总显那么不接地气,那么为了让我们的app也“高大上”一次,我写了一个demo来实现启动引导页的实现, ...

  9. [转] Java程序员学C#基本语法两个小时搞定(对比学习)

    Java程序员学C#基本语法两个小时搞定(对比学习)   对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. ...

随机推荐

  1. Windows下搭建PHP环境:Apache+PHP+MySQL

    本文简单记录一下Windows下搭建PHP环境的过程,一些细节可以参照本文参考资料,此文不再赘述 准备工作: Windows下手工搭建PHP环境需要先下载相应的软件,需要注意的是Apache与PHP的 ...

  2. Java:反射

    初识Java反射机制: 从上面的描述可以看出Java的反射机制使得Java语言可以在运行时去认识在编译时并不了解的类/对象的信息,并且能够调用相应的方法或修改属性的值.Java反射机制的核心就是允许在 ...

  3. 一些实用的sublime快捷键以及初始设置

    一些常用快捷键 Ctrl + N-------------------新建 Ctrl + F-------------------查找 Ctrl+Shift +k -----------删除一行 Ct ...

  4. Mysql之case语句(附带实例)

    这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case  when… then …end 1.判断的同时改变其值 eg:   ...

  5. mybatis字符串模糊匹配

    1.  参数中直接加入%%,注意不需要加两个单引号,加了就会出错,因为系统会自动为字符串类型加上两个单引号 <select id="selectPersons" result ...

  6. 新的博客 bincoding.github.io

    最近周围的人都在用静态博客,随主流也换了github page搭建hexo. bincoding.github.io 个人网站,用来上线乱七八糟的东西: bincoding.cn

  7. linux 配置 crontab

    linux中的crontab是定时用的,下面的cron服务就是定时器的意思 crontab -l 列举所有的cron服务 crontab -e 修改cron服务 crontab -r 删除cron服务 ...

  8. Java设计模式(一) 策略模式

    策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 1,定义算法接口 package com.pattern.strategy.test; publ ...

  9. bzoj1787

    lca裸题,画画图看看就可以了,找出那个一次公共祖先,求距离 #include<iostream> #include<set> #include<cstring> ...

  10. Vim快速移动光标至行首和行尾

    1. 需要按行快速移动光标时,可以使用键盘上的编辑键Home,快速将光标移动至当前行的行首.除此之外,也可以在命令模式中使用快捷键"^"(即Shift+6)或0(数字0). 2. ...