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。
    以上只是个人观点,如有错误,欢迎批评指正!
  • 相关阅读:
    ognl的应用1
    未命名
    flash钟表的实现
    文本显示输入字数
    HttpServlet session的用法: (2)
    $.fx与$.fn.fx 区别
    javascript 事件冒泡 和 冒泡事件阻止
    (function($){...})(jQuery) 含义
    选择城市插件 jQuery
    offset().left 用法
  • 原文地址:https://www.cnblogs.com/jackyim/p/2986078.html
Copyright © 2011-2022 走看看