【C++】【VLD】VLD检测内存泄漏

news/2024/11/23 5:11:14/

【C++】【VLD】VLD检测内存泄漏

C/C++ 程序越复杂,内存的管理显得越重要,稍有不慎就会出现泄漏。如果内存泄漏不是很严重,在短时间内对程序不会有太大影响,这也使得内存泄漏问题有很强的隐蔽性,不易被发现。

然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的 - 从性能下降到内存耗尽,甚至会影响其他程序的正常运行。


一、VLD 简介

VLD(全称:Visual Leak Detector)是一款用于 Visual C++ 的免费内存泄露检测工具。与其它内存检测工具相比,它在检测到内存泄漏的同时,还具有如下特点:

  • 可得到内存泄漏点的调用堆栈,以及其所在文件及行号

  • 可得到泄露内存的完整数据;

  • 可设置内存泄露报告的级别

  • 提供了打包好的 lib 库,使用时无须编译源码,直接使用即可;

  • 源码使用 GNU 许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。

VLD 简单易用,只需要添加库并包含头文件,然后正常运行自己的程序,就可以发现内存问题了;如果深入源码,可以学习到堆内存分配与释放的原理、内存泄漏检测的原理、以及内存操作的常用技巧等。

二、下载安装

VLD 主页:https://kinddragon.github.io/vld/

文档地址:https://github.com/KindDragon/vld/wiki

GitHub 地址:https://github.com/KindDragon/vld

进入主页后,点击右上角的“Download Installer”按钮,下载 VLD 安装程序(目前版本:vld-xxx-setup.exe):
在这里插入图片描述
下载完成之后,进行傻瓜式安装(下一步 …下一步),安装后的目录如下所示:
在这里插入图片描述

其中,各目录及其内容为:

bin:包含了运行时的库文件 - dbghelp.dllvld_x64.dll

include:包含了编译时要用到的头文件 - vld.hvld_def.h

lib:包含了编译时要用到的库文件 - vld.lib


三、使用方法

新建一个 C++ 控制台程序:

#include <vld.h>int main()
{int *a = new int[10];return 0;
}

然后,配置项目:

  • 附加包含目录:D:\Program Files\Visual Leak Detector\include

  • 附加库目录:D:\Program Files\Visual Leak Detector\lib\Win64

  • 附加依赖项:vld.lib

截止目前,VLD 最高支持到 VS 2015,在 VS 2019 中没有太多有关内存泄漏的信息,可以在属性设置中做相关配置:
在这里插入图片描述
在 Debug 模式下运行程序,VLD 会输出内存泄漏报告,其中包含了完整的调用堆栈:
在这里插入图片描述看到了吧,提示第 5 行出现了内存泄漏。
还等什么,抓紧时间解决啦:

#include <vld.h>int main()
{int *a = new int[10];delete[]a;return 0;
}

再次运行程序,内存泄漏已经不见了:
在这里插入图片描述

四、工作原理

想必到这里,很多小伙伴都对 VLD 的工作原理感兴趣,其实它的主要工作分了三步:

  1. 在初始化时注册一个钩子函数;
  2. 在内存分配时,该钩子函数会被调用,以记录当时的现场;
  3. 检查堆内存分配链表,以确定是否存在内存泄漏,并将泄漏内存的现场转换成可读的形式输出。

http://www.ppmy.cn/news/578327.html

相关文章

求生之路2服务器搭建指南个人存档

求生之路2服务器搭建指南个人存档 安装服务器安装steamcmd执行以下命令安装l4d2 插件使用安装插件工具个人使用插件 服务器配置设置管理员启动服务器 安装服务器 安装steamcmd mkdir ~/steamcmd cd ~/steamcmd wget https://steamcdn-a.akamaihd.net/client/installer/steamc…

求生之路2联机服务器没有响应,求生之路2进不了服务器

电脑配置问题!具体的,你还是看一下说明吧: ####################### # 游戏运行时出现XXX不是有效的 windows映像文件 ####################### 解决方法: 可以使用搜索(点“开始”—“搜索”—“文件或文件夹”)功能搜索“ XXX”文件,查看是属于系统文件还是游戏文件,如…

【不务正业】使用腾讯云搭建求生之路2服务器

使用腾讯云搭建求生之路2服务器 整件事情的起因服务器的选择Linux系统的选择需要参考的材料服务器防火墙设置Steamcmd的安装L4D2安装服务器设置与启动在L4D2里面进入服务器结语 整件事情的起因 自从我觉得nonebot不好玩了之后尝试了MC服务器&#xff0c;奈何贫弱的2C2G ECS实在…

求生之路显示服务器的指令,求生之路的所有控制台指令!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 z_charger_health 600 Charger小坦克的生命值 z_charge_max_speed Charger小坦克的移动速度 z_charge_max_damage Charger小坦克的摔击伤害 z_jockey_health 325 Jockey骑头怪的…

求生之路显示服务器ip,求生之路云服务器开服教程

求生之路云服务器开服教程 内容精选 换一换 选择Windows开发环境下&#xff0c;安装Eclipse&#xff0c;安装JDK。建议JDK使用1.8版本&#xff0c;Eclipse使用4.3.2及以上版本。若使用IBM JDK&#xff0c;请确保Eclipse中的JDK配置为IBM JDK。若使用Oracle JDK&#xff0c;请确…

[游戏代码]求生之路插件-服务器中文名称

本脚本只在L4D1下成功测试 #include <sourcemod> #define ZB_VERTION "1.0.0.0" public Plugin:myinfo { name "服务器中文名称", author "作者:maxjo.汉化:紫冰", description "服务器可以以中文命名"…

求生之路2怎么联机显示服务器,求生之路2联机如何创建服务器?

用控制台创建&#xff0c;不是在游戏中创建 .控制台命令&#xff1a;按下“~”键呼出控制台&#xff0c;即可以输入下列地图命令去对战平台建立主机。如果呼不出控制台&#xff0c;请查看 选项->键盘/鼠标->允许使用开发者模式 后面是否已开启。 合作模式建图命令: map c…

求生之路服务器租用配置要求介绍

以僵尸大灾难为背景&#xff0c;《求生之路 2》&#xff08;L4D2&#xff09;是 2008 年最受欢迎的合作游戏 —《求生之路》的续集。 这个恐怖的第一人称射击游戏将带领你和你的好友穿过城市&#xff0c;沼泽&#xff0c;深入南部的墓地&#xff0c;从沙凡那港市到新奥尔良&…