VLD使用
VLD网址:http://vld.codeplex.com/ 下载安装之后, 在VS2012 项目 属性→"VC++ 目录",在"包含目录"中增加VLD的头文件路径"\include"路径,在"库目录"增加VLD库文件的"\lib\Win32"路径,此外动态库的"\bin\Win32"路径在安装时已经添加到环境变量里面了,若是未添加,则需要手动拷贝"\bin\Win32"下的文件到可执行文件所在的目录中(拷贝的文件有dbghelp.dll/Microsoft.DTfW.DHL.manifest/vld_x86.dll/vld.ini)。 接下来需要将VLD加入到自己的代码中。方法很简单,只要在包含入口函数的.cpp文件中包含vld.h就可以。如果这个cpp文件中包含了stdafx.h,则将包含vld.h的语句放在stdafx.h的包含语句之后,否则放在最前面。 注:VLD只能在Windows下使用,在包含vld.h头文件时增加预编译选项。 注:在Release模式下,不会链接VisualLeak Detector。 注:(这个不太懂)Visual LeakDetector有一些配置项,可以设置内存泄露报告的保存地(文件、调试器),拷贝"\Visual Leak Detector"路径下的vld.ini文件到执行文件所在的目录下(在IDE运行的话,则需要拷贝到工程目录下),修改以下项: ReportFile =.\memory_leak_report.txt ReportTo = both 示例代码: #include <vld.h> #include <stdlib.h> #include <stdio.h> void f() { int *p = new int(0x12345678); printf("p=%08x, ", p); } void main() { f(); } 编译运行后,在标准输出窗口得到: p=003a89c0 在Visual C++的Output窗口得到: WARNING: Visual Leak Detector detected memory leaks! ---------- Block 57 at 0x003A89C0: 4 bytes ---------- --57号块0x003A89C0地址泄漏了4个字节 Call Stack: --下面是调用堆栈 d:\test\testvldconsole\testvldconsole\main.cpp (7): f --表示在main.cpp第7行的f()函数 d:\test\testvldconsole\testvldconsole\main.cpp (14): main –双击以引导至对应代码处 f:\rtm\vctools\crt_bld\self_x86\crt\src\crtexe.c (586): __tmainCRTStartup f:\rtm\vctools\crt_bld\self_x86\crt\src\crtexe.c (403): mainCRTStartup 0x7C816D4F (File and line number not available): RegisterWaitForInputIdle Data: --这是泄漏内存的内容,0x12345678 78 56 34 12 xV4..... ........ Visual Leak Detector detected 1 memory leak. 第二行表示57号块有4字节的内存泄漏,地址为0x003A89C0,根据程序控制台的输出,可以知道,该地址为指针p。程序的第7行,f()函数里,在该地址处分配了4字节的堆内存空间,并赋值为0x12345678,这样在报告中,我们看到了这4字节同样的内容。 可以看出,对于每一个内存泄漏,这个报告列出了它的泄漏点、长度、分配该内存时的调用堆栈、和泄露内存的内容(分别以16进制和文本格式列出)。双击该堆栈报告的某一行,会自动在代码编辑器中跳到其所指文件的对应行。这些信息对于我们查找内存泄露将有很大的帮助。 这是一个很方便易用的工具,安装后每次使用时,仅仅需要将它头文件包含进来重新build就可以。而且,该工具仅在build Debug版的时候会连接到你的程序中,如果build Release版,该工具不会对你的程序产生任何性能等方面影响。所以尽可以将其头文件一直包含在你的源代码中。 Visual Leak Detector工作原理------还在学习....
VLD使用
最新推荐文章于 2023-04-16 12:38:04 发布