zoukankan      html  css  js  c++  java
  • C/C++检测内存泄漏的工具 Visual Leak Detector223 的使用方法

    Visual Leak Detector是一个免费的内存泄露检测工具,适用于Visual C++ debugger(Visual C++ 6\2003\2005 and 2008\2010)。

    下载地址:http://vld.codeplex.com/releases/view/82311

    说明及备用下载地址:http://www.xdowns.com/article/170/Article_3060.html

    使用方法1:
        1.安装vld,如果它说是否要打入到什么系统环境变量,点是。
        2.将安装路径(我的是C:\Program Files\Visual Leak Detector)的.h文件(include文件夹内)、.lib文件(lib\win32) 拷贝到VC++的include、lib目录(我的是VS2008精简版:C:\Program Files\Microsoft Visual    Studio 9.0\VC\include和C:\Program Files\Microsoft Visual Studio 9.0\VC\lib)。 PS:有的还说要设置你VC++工程的目录,我设置后去掉了,貌似没什么影响,因为我没有用vc++编译,用的是scons,设置VC目录参考:http://vld.codeplex.com/wikipage?title=Using%20Visual%20Leak%20Detector&referringTitle=Documentation
        3.在你想要检测泄露的文件加上#include <vld.h>,网上的原话:In the source file containing your program's main entry point, include the vld.h header file.
    需要注意的是:如果这个cpp文件包含了stdafx.h,则将包含vld.h的语句放在stdafx.h的包含语句之后,否则放在最前面。(在上面说明链接中有例子)
        4.重新编译下,F5启动你的程序就会在调试输出框看到已加载的信息。下图可以看到VLD已经加载成功了。(我的不是控制台程序,是公司产品!)
       5.在你的程序中做一些操作,然后退出(必须要退出,不是shift+f5停止调试。VLD will detect memory leaks in your program whenever you run the debug version under the Visual C++ debugger. A report of all the memory leaks detected will be displayed in the debugger's output window when your program exits.),你就会看到一些内存泄露信息。。。好多。。。
    例如:
     
    信息还是比较丰富的,不像自带的检测工具,可以双击堆栈查看问题代码,进一步修改。
     
    使用方法2(安装到你的项目中):我用的就是这个方法。
          1.安装vld,同上面使用方法的1.
          2.第一种方法直接把.h和lib库拷贝到了VC++的目录中,换台电脑就不行了,考虑到我们项目的可移植性,我直接加到了我们项目的import文件夹中,这个import文件夹内有好多库,如wxWidgets、mysql等。我把Visual Leak Detector安装目录下的bin,include,lib,src文件夹全部放进了import,实际上src文件夹应该不需要。
          3.同第一种方法3,加入头文件,不过路径要换下,我的是:#include "import/Visual Leak Detector/include/vld.h"
          4. Scons编译器——修改scons编译脚本,由于我们公司编译用scons,需修改目录的SConstruct文件,在LIBPATH上加lib的路径,否则编译时一直说找不到lib  库, 例:
              projectEnv['LIBPATH'].append(projectEnv['IMPORTDIR'] + '/Visual Leak Detector/lib/' + projectEnv['PLATFORM'])
              然后再修改目录的SConstruct文件,也即import文件夹下的,加上dll的路径,以下是我们公司的示例:
          importEnv.Install(importEnv['BINDIR'], 'Visual Leak Detector/bin/' + importEnv['PLATFORM'] + '/' + 'dbghelp.dll')
          importEnv.Install(importEnv['BINDIR'], 'Visual Leak Detector/bin/' + importEnv['PLATFORM'] + '/' + 'vld_x86.dll')
          importEnv.Install(importEnv['BINDIR'], 'Visual Leak Detector/bin/' + importEnv['PLATFORM'] + '/' + 'Microsoft.DTfW.DHL.manifest'),目的就是把3个文件安装到bin目录下,也就是程序的路径。
           4.如果是VC++编译器,这个没有测试过。。
               1).设置VC++的工程目录(如何设置,参考上面的链接),加上VLD的lib库路径和头文件路径,代码中可以写成
                    #include "..\include\vld.h"
                    #pragma comment(lib,"../lib/Win32/vld.lib")
               2).把3个文件dbghelp.dll,vld_x86.dll,'Microsoft.DTfW.DHL.manifest'拷贝到你程序的bin目录下。
           5.F5启动,你就会看到加载的vld_x86.dll等是你程序的路径了:
       
    小结:无论是那种方法,你都要让你的程序知道,如何去加载vld的dll,第一种方法,直接加到vc的include和lib路径,在你的代码中加入vld.h,编译时自动搜索VC的lib路径,运行时就会找到那些dll了(至于怎么找,还不清楚),第二种方法,加到项目中,代码加入vld.h,设置下VC++的目录lib和头文件的路径(scons设置下LIBPATH),编译时会去找那个lib库,如果不设置,编译器就会说找不到那个vld.lib,在运行时,你的程序会根据lib库的信息,找到bin目录下vld的dll。
    以上只是个人观点,如有错误,欢迎批评指正!
  • 相关阅读:
    cnblog项目--20190309
    django js引入失效问题
    Python老男孩 day16 函数(六) 匿名函数
    Python老男孩 day16 函数(五) 函数的作用域
    Python老男孩 day15 函数(四) 递归
    Python老男孩 day15 函数(三) 前向引用之'函数即变量'
    Python老男孩 day15 函数(二) 局部变量与全局变量
    Python老男孩 day14 函数(一)
    Python老男孩 day14 字符串格式化
    Python老男孩 day14 集合
  • 原文地址:https://www.cnblogs.com/jackyim/p/2986078.html
Copyright © 2011-2022 走看看