VC 查看内存泄漏

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
VC 查看内存泄漏

被内存泄漏问题很头疼,搜索了一些查看内存泄漏的相关技术,在此存根。

以下内容为转载:

*vc中检测内存泄露的工具VLD(visual leak detector)

灵活自由是C语言的一大特色,但这个特色也难以避免的带来一些副作用,比如内存泄露。众所周知,内存泄露的问题比较复杂,程序正常运行时你看不出它有任何异常,但长时间运行或在特定条件下特定操作重复多次时,它才暴露出来。所以,内存泄露往往是难以发现,也难以定位解决的。

Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具,用户可从http://www.codeproject.com/tools/visualleakdetector.asp下载,该软件以库形式与用户的被测工程一起使用,由于VLD是按LGPL(GNU LESSER GENERAL PUBLIC LICENSE)协议对外开源,所以使用VLD是安全的,不必担心版权问题。

VcTester是一款适合于VC代码的白盒测试工具,借助它的脚本驱动与脚本桩功能,可以方便的发起各项测试,因为内存泄露通常在特定操作下才发生,将VcTester与VLD配合使用,由VcTester模拟各种应用场景,VLD检测这些使用场合下有无内存泄露。

使用VLD

先从网站下载VLD的zip包,当前最高版本是V1.0,解压后得到vld.h、vldapi.h、vld.lib、vldmt.lib、vldmtdll.lib、dbghelp.dll等文件,把这些所有.h头文件拷贝到VC默认的include目录下,将所有.lib文件拷贝到VC默认的lib目录下,安装工作就完成了。

使用VLD很简单,只须在包含入口函数的CPP或C文件中把vld.h头文件包含进来即可。该include语句要求放在最前面,如果当前工程定义预编译head文件(如stdafx.h),则放在“#include ”语句之后就可以了。之后正常编译、按Debug方式运行被测程序,等程序运行结束时,查阅VC的output窗口,会有“Visual Leak Detector is now exiting.”一句打印信息,在这条件信息之前,如果当前程序没有内存泄露会有“No memory leaks detected.”信息打印,但如果有内存泄露,将有类似如下信息打印:

C:"VcTester21"sample"vc6"SampleMain.c (80): main

crt0.c (206): mainCRTStartup

0x7C816FD7 (File and line number not available): RegisterWaitForInputIdle

Data:

CD CD CD CD CD ........ ........



Visual Leak Detector detected 1 memory leak.

这个信息指明当前发生内存泄露所在的函数及源文件行号,泄露内存块的地址、长度及当前内存值。用鼠标双击指示源码行的提示信息,VC即自动跳转到相应代码行,我们就很方便的知道是哪一行出错了。

可以看出,VLD用起来很简单,对它的实现原理感兴趣的朋友可以阅读VLD源码,也可参考dofty

如何在VC中使用DEBUG  在VC中使用Debug选定Debug编译选项Build -> Set Active Configuration -> Win32 Debug或者在Build工具栏上的ListBox中选择Debug。Debug定义了_DEBUG宏,而Release定义了NDEBUG宏。 先按F12编译Browse信息这样编译后可以查到变量定义。  执行Debug按F5(注意,如果按Ctrl+F 阅读详情

相关推荐

VC6 内存泄漏检测

利用VC++6.0撰写内存泄漏检测的方法

vc查看内存泄漏

vs自带内存诊断工具,通过内存快照,可以获取到当前的内存,通过调试和抓取内存快照可以分析出,内存泄漏点 两次内存快照可以通过如下图展开的堆栈进行分析,右上角可以选择和本次快照比较的基础版本.........

daoer_sofu的专栏 738

【LibUIDK系列文章】VC内存泄漏检查

本文详细讨论了VC内存检测的一些技巧。

psbeyond的专栏 721

VC内存泄露检查方法

<br /><br />介绍:<br />   动态分配、回收内存是C/C++编程语言一个最强的特点,但是中国哲学家孙(Sun Tzu,我不知道是谁?那位知道?) 指出,最强的同时也是最弱的。这句话对C/C++应用来说非常正确,在内存处理出错的地方通常就是BUGS产生的地方。一个最敏感和难检测的BUG就是内存泄漏-没有把前边分配的内存成功释放,一个小的内存泄漏可能不需要太注意,但是程序泄漏大块内存,或者渐增式的泄漏内存可能引起的现象是:先是性能低下,再就是引起复杂的内存耗尽错误。最坏的是,一个内存泄漏程序

遐迩思的专栏 3312

VC 检测内存泄露的几种方法

在Visual C++中检测和隔离内存泄漏 具有动态的分配和释放内存的能力是C/C++程序语言的重要特色之一。VisualC++ debugger和CRT库提供了一系列有效的检测和鉴定内存泄漏工具。 设置内存泄漏检测   检测内存泄漏的基本工具是调试器和CRT调试堆函数。为了使用调试堆函数,在你的程序中你必须含有下面的说明: #define _CRTDBG_MAP_ALLOC #i

xiliang_pan的专栏 1万+

浅谈C++中内存泄漏的检测

 首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复。最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck,功能非常强大,相信做C++开发的人都离不开它。此外就是不使用任何工具,而是自己来实现对内存泄露的监控,分如下两种情况:一. 在 MFC 中检测内存泄漏假如是用MFC的程序的话,很简单。默认的就有内存泄露检测的功能。我

luixing67的专栏 815

细谈VC程序调试的若干方法

记得我刚开始用VC编程时,多次遇到程序编译链接都没有任何错误提示时运行却发生意外错误或者陷入死机状态,对此我真是茫然不知所措。后来经过项目工程的“洗礼”,我学到了一些解决这类错误的方法同时也将自己积累的经验运用到开发工作中,从而避免了重蹈覆辙,编程效率得以明显提高。如果你用VC而不精通解决上述种种莫名其妙故障的调试技术,那么软件的进度和质量将无法保障。VC调试之重要不言而喻。   其实VC所依赖...

thanklife的专栏 866

VC调试方法

VC所依赖的开发平台MicrosoftDeveloperStudio本身提供的调试功能并不弱,每当我们创建一个新的VC工程项目时,默认状态就是Debug(调试)版本,在"组建"(Build)菜单下的Configurations中可以看到除了调试版本还可以设置成发行(Release)版本。调试版本由于包含了大量信息,所以它生成的可执行程序容量会远远大于发行版。...

weixin_30443813的博客 121

如何在VC中使用DEBUG(ZZ)

VC中使用Debug选定Debug编译选项Build -> Set Active Configuration -> Win32 Debug或者在Build工具栏上的ListBox中选择Debug。Debug定义了_DEBUG宏,而Release定义了NDEBUG宏。 先按F12编译Browse信息这样编译后可以查到变量定义。  执行Debug按F5(注意,如果按Ctrl+F5

daleyoung的专栏 4178

2010/7/9 vc调试

<br />正文<br />在开发程序的过程中,经常需要查找程序中的错误,这就需要利用调试工具来帮助你进行程序的调试,当然目前有许多调试工具,而集成在VC中的调试工具以其强大的功能,一定使你爱不释手。下面我们先来介绍VC中的调试工具的使用。<br /><br />1  VC调试工具<br />1.1 调试环境的建立<br />     在VC中每当建立一个工程(Project)时,VC都会自动建立两个版本:Release版本,和Debug版本,正如其字面意思所说的,Release版本是当程序完成后,准备发行

chenwanming507507507的专栏 593

VC调试小技巧(菜鸟级)

1.在调试状态下怎样查看错误消息(GetLastError())?通常可以用GetLastError()得到错误编号然后用FormatMessage(...)得到错误描述。这里有一个更直接的办法:在Watch窗口添加@err,hr2.怎样知道程序是否有内存泄漏(Memory Leak)?在VC开发环境下Press [F5],在调试状态下运行程序,测试有可能出现内存泄漏的操作,关闭程

simba99的专栏 848

查找内存泄露的方法

VC编译器下的做法:在每个头文件中加入:#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif 在main函数开头加入:int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG

shengy的专栏 558

VC内存泄漏检查

日期: 2016-12-20 参考:MSDN:ms-help://MS.MSDNQTR.v90.chs/dv_vsdebugnative/html/cf6dc7a6-cd12-4283-b1b6-ea53915f7ed1.htm 通过在MSDN中输入:DEBUG_NEW,可以找到“DEBUG_NEW 宏”,在"请参见其他资源"中,打开“MFC中的内存泄漏检测”,在“MFC中的内存泄漏检测”页面...

psbeyond的专栏 1643

FFMPEG的一些使用技巧

1 在vc中使用ffmpeg静态库做二次开发的时候,如果不是控制台应用程序,又需要查看ffmpeg的日志信息,可使用 av_log_set_callback 函数注册一个回调函数,如 void ff_log_callback(void*avcl, int level, const char*fmt, va_list vl) { char log[1024];

liuhongxian的专栏 7186

iOS ViewController Dealloc监听

每一次版本迭代,最麻烦的步骤就是检测内存问题,当出现大量的未使用内存被无效占用,会直接导致如下两种后果: 每次App进入后台后,当iphone出现内存不足,需要释放app的时候,app总是被优先释放 更严重的甚至会出现由于内存问题崩掉的情况 传统的解决方案有两种: 要么是通过控制台打印...

282

内存泄漏

启用内存泄漏的设定函数: int _CrtSetDbgFlag(int bits); 返回值:会返回目前的设定,bits是新的值 通常我们会使用 _CRTDBG_REPORT_MODE 获得当前的位 会使用如下方式: 参数: 这里有原文:http://msdn.microsoft.com/en-us/library/5at7yxcs.aspx 简单的说明一下这个地址上

junjie020的专栏 999

(转)FFMPEG的一些使用技巧

1、查看FFMPEG的日志信息 在vc中使用ffmpeg静态库做二次开发的时候,如果不是控制台应用程序,又需要查看ffmpeg的日志信息,可使用 av_log_set_callback 函数注册一个回调函数,如 voidff_log_callback(void*avcl,intlevel,constchar*...

dianchixian5277的博客 132
上一篇: hbitmap Cbitmap的转换
下一篇: python fork Windows平台下没有这个函数
qrsssh
博客等级 码龄19年 18粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值