当前位置:网站首页>内存泄露检测工具VLD(Visual Leak Detector)使用说明
内存泄露检测工具VLD(Visual Leak Detector)使用说明
2022-08-09 14:52:00 【Nicolas0311】
内存泄露是经验不足的程序猿最常遇到的,非常难处理的一类型错误。导致的问题也千奇百怪,很难定位。
最好的办法当然是养成良好的编码习惯,比如声明了指针数据或者指针类之后。
1.优先在对应的构造函数中,赋初值pXXX = nullptr;
2.牢记在指针使用完成之后进行if(e!= nullptr){delete e; e=nullptr;} 或者if(e!= nullptr){delete []e;e=nullptr;}
3.局部变量问题,在某个函数中new出了指针数据或者指针类,那么请牢记在当前函数退出的任何一个地方,请如2所说,安全删除指针数据或者指针类。
4.尽可能使用vector来代替指针数组,多重指针等。避免出差错的可能性。
但是,如果问题已经积累比较久,还有你可能接手了别人的代码,发现此类问题。那么,可以使用内存泄露检测工具VLD(Visual Leak Detector)来协助排查问题。VLD的使用方法如下:
1.到GitHub上下载Release v2.5.1 · KindDragon/vld (github.com)上下载最新的VLD程序。页面最下方

2.安装到自己喜欢的路径即可。
3.然后打开VS和想要检测内存泄露问题的项目属性里,增加附加头文件目录。
下图中,第一个种方法,如第一个箭头所指。是自己找到VLD安装目录提取对应的头文件和库相关文件,打包成VLD_SDK后放到项目中的Lib文件夹下;第二种方法,如果能看到第二个箭头这里,有继承的值,因为安装VLD的exe后,系统继承了对应的环境变量路径。可以直接勾选第三个箭头即可。

4.增加附加库目录。
下图中,第一个种方法,如第一个箭头所指,把打包的VLD_SDK库目录添加进来。第二种方法,如果能看到第二个箭头这里,有继承的值,因为安装VLD的exe后,系统继承了对应的环境变量路径。可以直接勾选第三个箭头即可。

5.然后找到程序入口的函数处,增加一行代码,导入头文件#include "vld.h",编译程序并运行。
测试程序如下:
#include "stdafx.h"
#include <iostream>
#include "vld.h"
void test()
{
char* pChar = new char[20];
//delete[] pChar;
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
test();
return 0;
}
那么我们可以看到VLD在VS输出窗口输出的内容。
-------------------------华丽的分割线-------------------------------------------
Visual Leak Detector Version 2.5.1 installed.
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x00552290: 20 bytes ----------
Call Stack:
e:\test\consoleapplication1\consoleapplication1\consoleapplication1.cpp (10): ConsoleApplication1.exe!test + 0x7 bytes
e:\test\consoleapplication1\consoleapplication1\consoleapplication1.cpp (18): ConsoleApplication1.exe!wmain
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (533): ConsoleApplication1.exe!__tmainCRTStartup + 0x19 bytes
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (377): ConsoleApplication1.exe!wmainCRTStartup
0x7507336A (File and line number not available): kernel32.dll!BaseThreadInitThunk + 0x12 bytes
0x770F92B2 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x63 bytes
0x770F9285 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x36 bytes
Data:
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD ........ ........
Visual Leak Detector detected 1 memory leak (56 bytes).
Largest number used: 56 bytes.
Total allocations: 56 bytes.
Visual Leak Detector is now exiting.
--------------------------------------------------------------------------
双击vld提示的内存泄漏的行号信息,那么我们就可以直接定位到有内存泄漏的地方。
6.vld.ini参数设置说明
默认读取的是安装目录下的vld.ini 文件,当exe所在目录下也有vld.ini文件时会优先读取这份配置。
VLD:选择VLD的打开与关闭。在Debug模式下运行,关闭以后会有一行VLD关闭的提示信息。默认为 on。
AggregateDuplicates:设置为 yes 时,相同地方产生内存泄漏只输出一次,但是会统计发生的次数。默认是 no 。
MaxDataDump:输出的dump数据个数,默认为 256。
MaxTraceFrames:输出的调用栈的层数。默认是 64。
ReportEncoding :report 文件的编码格式,可选有 ascii, unicode,默认是 ascii 。
ReportFile :report 文件的路径。默认是 “.\memory_leak_report.txt”
ReportTo :可选有 debugger, file, both,debugger 表示输出到 debug模式下的输出窗口;file 表示只输出到文件中; both顾名思义,全都都输出。默认是 debugger 。
备注:怎么让VLD的文件输出到一个独立的文件中?
答:配置 ReportFile = .\你的程序名称_vldLog.txt 和 ReportTo = both 即可。
边栏推荐
- 相似图像的检测方法
- How to make your quantitative trading system have probabilistic advantages and positive return expectations?
- 突然想分析下房贷利率及利息计算
- DBCO-PEG-DSPE,磷脂-聚乙二醇-二苯并环辛炔,在无铜离子的催化下反应
- 【磁场建模项目2020-02-Lilin】采集板硬件规范
- 如何通过股票量化交易接口实现盈利稳定?
- DSPE-PEG-Hydrazide, DSPE-PEG-HZ, Phospholipid-Polyethylene Glycol-Hydrazide MW: 1000
- MySQL数据库被攻击,被删库勒索,逼迫我使出洪荒之力进行恢复数据
- 抢占量化交易基金产品先机,量化投资有发展空间?
- 走得通,看得见!你的交通“好帮手”
猜你喜欢
随机推荐
CV复习:BatchNorm
WebShell简介
职业量化交易员对量化交易有什么看法?
Bean的生命周期
DSPE-PEG-Hydrazide,DSPE-PEG-HZ,磷脂-聚乙二醇-酰肼MW:1000
分析:通过哪种方法来建立股票量化交易数据库?
【基础版】整数加减乘除计算器
[Mysql]--Transaction, transaction isolation level, dirty read, non-repeatable read, phantom read analysis
Similar image detection method
【超级账本开发者系列】专访——肖慧 : 不忘初心,方得始终
What is the difference between the four common resistors?
docke安装mysql以及主从搭建(并且指定数据生成路径)
程序化交易规则对于整个交易系统有什么意义?
Servlet life cycle
一些需要思考的物理问题
STSW-LINK00x下载集合,百度云连接
Servlet的生命周期
物理学专业英语(词汇整理)--------07
Play in the cloud | The ever-changing gameplay of Tianyi cloud computer
How to flexibly use the advantages of the quantitative trading interface to complement each other?

![[MySql]实现多表查询-一对一,一对多](/img/7e/8f1af4422a394969b28a553ead2c42.png)







