控制台和MFC中内存泄露工具vld的使用

   最近想检测下项目中内存泄露的情况,选中了vld这款。在查找使用方法的时候,大都是控制台下的示例,添加到main函数所在的源文件上。换成MFC就纠结了,不知道添加到哪里去。本文记录控制台和MFC中的使用vld过程。

   vld资源:

   1)、大家可以移步下边的网址下载:

    http://vld.codeplex.com/releases/view/82311

   2)、也可以到我的资源中下载:

    http://download.csdn.net/detail/alex_my/6238977

    本文使用的是我的资源中的vld1.0版本,VS2008。

   1、控制台:

    将资源下载后,解压到项目根目录。

    

   据说在WIN7下,需要将dbghelp.dll放到Debug目录中。

   将dbghelp.dll放入Debug目录后,才能定位哪一行出错。// 2014.05.09

   打开工程,在main所在的文件添加代码:#include "vld.h",只要添加这个就足够了。

   写了一个func()函数测试:

  

   当整个过程运行完毕之后,结果:

  

  可以双击相应的行,确定出问题的地方。

    

   2、MFC

   这里使用的是VS2012版,与VS2008几乎一样。

   1)首先创建一个MFC工程。

   2)假设在工程里有一个include文件夹专门放置头文件,lib文件夹专门放置lib文件。

    

   3)将解压出的vld中的vld.h,vldapi.h放入include文件夹中。vld.lib,vldmt.lib,vldmtdll.lib放入到lib文件夹中。

   4)进行必要设置:

    C/C++ --> General --> Additional Include Directories : include

    Linker --> General --> Additional Library Directories: lib

    Linker --> Input --> Additional Dependencies: vld.lib,vldmt.lib,vldmtdll.lib

   5)添加vld.h头文件

   在控制台下是放在main函数所在的源文件中,而在MFC下,则放在theApp初始化的源文件中。

   如果找不到的,可以全文搜索:theApp。

   添加好vld.h头文件后,可以写一个测试函数,如上的func函数。

   F5运行,在Output窗口可以看见:

   Visual Leak Detector Version 1.0 installed (single-threaded static).

   Shift + F5,退出

   可以看见内存泄露的地方,如同控制台:

   

   6)编译过程出错

    可能在编译过程中出错,cannot open file 'LIBCD.lib'。

    解决方案:

    VS2008:Linker --> Input  --> Ignore Specific Library: libcd

    VS2012: Linker --> Input  --> Ignore Specific Default Library: libcd

时间: 2024-10-27 18:56:39

控制台和MFC中内存泄露工具vld的使用的相关文章

Visual C++内存泄露检测—VLD工具使用说明 .

Visual C++内存泄露检测-VLD工具使用说明 一.        VLD工具概述 Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号: 可以得到泄露内存的完整数据: 可以设置内存泄露报告的级别:并且是开源免费的.   二.        VLD下载 http://www.codeproject.com/tools/visualleakdetector.

Android中内存泄露代码优化及检测

  内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费.         正如下文所说,内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来.然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,即使严格意义上来说这是不准确的. 一.内存泄露         内存泄漏会因为减少可

如何避免iPhone应用中内存泄露

  创建对象时,所有权通过alloc.new.或者copy的方式建立,之后通过调用retain或者通过Cocoa函数来分配和复制对象的所有权. 内存释放有两种方式,一种方法是明确地请求释放对象的所有权,另一种方法则是使用自动释放池(auto-release pool). 所有权的背后是一个和引用有关的运算系统,iPhone SDK的大多数对象使用这个系统,彼此之间建立着很强的引用和参照. 当你创建一个对象时,引用值为1,调用一次retain则对象的引用值加1,调用一次release则对象的引用值

关于MFC下检查和消除内存泄露的技巧

摘要 本文分析了Windows环境使用MFC调试内存泄露的技术,介绍了在Windows环境 下用VC++查找,定位和消除内存泄露的方法技巧. 关键词:VC++:CRT 调试堆函数: 试探法. 编译环境 VC++6.0 技术原理 检测内存泄漏的主要工具 是调试器和 CRT 调试堆函数.若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>注意 #include 语句

android开发中的java内存泄露分析

做了较长时间的android开发了,发现其实android应用开发入门容易,但是进阶或者成为高级工程师,需要具备的基础能力还是非常高的:性能优化.内存泄露.apk瘦身.热修复等等,这些都非常的考验一个人的能力.android成长之路还很长,自己会持续的走下去.本文主要介绍android内存泄露方面的知识.其实要真的理解内存泄露,需要对JVM.java语言有一定的了解,在这个基础上就比较容易理解本文了. 一.内存泄露概念 在java中,如果一个对象没有可用价值了,但又被其他引用所指向,那么这个对象

避免 Android中Context引起的内存泄露_Android

Context是我们在编写Android程序经常使用到的对象,意思为上下文对象. 常用的有Activity的Context还是有Application的Context.Activity用来展示活动界面,包含了很多的视图,而视图又含有图片,文字等资源.在Android中内存泄露很容易出现,而持有很多对象内存占用的Activity更加容易出现内存泄露,开发者需要特别注意这个问题. 本文讲介绍Android中Context,更具体的说是Activity内存泄露的情况,以及如何避免Activity内存泄

避免 Android中Context引起的内存泄露

Context是我们在编写Android程序经常使用到的对象,意思为上下文对象. 常用的有Activity的Context还是有Application的Context.Activity用来展示活动界面,包含了很多的视图,而视图又含有图片,文字等资源.在Android中内存泄露很容易出现,而持有很多对象内存占用的Activity更加容易出现内存泄露,开发者需要特别注意这个问题. 本文讲介绍Android中Context,更具体的说是Activity内存泄露的情况,以及如何避免Activity内存泄

使用Android Studio检测内存泄露(LeakCanary)_Android

内存泄露,是Android开发者最头疼的事.可能一处小小的内存泄露,都可能是毁千里之堤的蚁穴. 怎么才能检测内存泄露呢? AndroidStudio 中Memory控件台(显示器)提供了一个内存监视器.我们可以通过它方便地查看应用程序的性能和内存使用情况,从而也就可以找到需要释放对象,查找内存泄漏等. 熟悉Memory界面 打开日志控制台,有一个标签Memory ,我们可以在这个界面分析当前程序使用的内存情况. 运行要监控的程序(APP)后,打开Android Monitor控制台窗口,可以看到

java内存泄露是错误还是异常

问题描述 今天去掏宝面试,被问到"java的内存泄露是错误还是异常?"我答:是错误我不知道答得对不对?请大家说说!! 解决方案 解决方案二:个人愚见:如果内存泄露的消息被java反馈回来,并有警示消息那么应该是异常,应该说所谓"异常"就是被程序捕获的错误,超出程序预期的目的或者计划.如果内存泄露后,未能捕获进而引发了灾难性的后果,例如主程序崩溃或者蓝屏死机,那么就是应该是错误.能否捕获并处理是区分是否是错误或者异常的关键,这个题目感觉出的很模糊,java的内存泄露到