赞
踩
最近刚换工作,还在试用期,分配给我的也都是些零碎的任务。
前阵子领导扔给我一个小项目,这个项目底层使用C++编写的3D渲染引擎,然后用CLI包装了一下,提供给上层的C#调用。这个项目存在比较严重的内存泄漏问题,由于目前公司写C++的人寥寥无几,写C#的又不太懂如何检测C++的内存泄漏,领导就把这个小任务扔给了我。
本文主要介绍三种内存检测技术:VLD、CRT、Deleaker
1.VLD (Visual Leak Detector)
vld是一个免费的、健壮的、开源的内存检测工具,适用于VS2008-2015,使用之前需要先安装,下载地址。下载完之后获得vld-2.5.1-setup.exe,这里我用的是当下最新的2.5.1版本。安装完成之后会在VS的包含目录中默认添加vld的头文件包含路径:
VLD的使用非常简单,只需要在C++项目的任意一个参与编译的cpp文件中引用vld.h头文件
然后在Debug模式下运行程序,当程序退出时,在调试窗口就会打印出产生的内存泄漏
泄漏信息中可以定位到具体的泄漏行,并包括详细的堆栈调用。我用VS2017也试了一下,虽然也能检测到泄漏,但不能定位到具体行,网上有一些所谓的黑科技可以解决,大致就是把VS2017安装目录下的dbghelp.dll覆盖到vld的安装目录下,读者可以自己试一下。
2.CRT(C运行时库)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。