使用 VisualStudio 诊断工具 解决 c++ 项目的内存泄漏

今天了解了一下 VisualStudio “诊断工具”,感觉非常好用,甚至强过xcode 的 instrument 的泄漏检查工具。趁热记录一下经验感受。

应用场景

今天同事反应,我们的游戏每一局新开一把,内存都会飙升几十兆。反复开几把,内存会飙到1.5G然后挂掉。光听现象很明显是发生了内存泄漏。 本来打算找一些 windows 平台的工具来检查。由于我们项目使用的是 Vistual Studio 2015,自带了 "诊断工具"功能。之前也没有用过,打算用这个诊断工具,来检查一下项目里 c++ 代码的内存泄漏。

功能简介

在Debug模式下运行游戏工程,打开"诊断工具"的"内存使用率"标签页,可以开启内存检测。点击了"堆分析"按钮后,游戏会奇卡无比。针对我们项目上面所说的情况,我打算在每局游戏截取内存快照,退出一局游戏在同样的时机再截取一次内存快照。比较两次快照的结果,来定位泄漏的代码。

截取快照

游戏运行以断时间之后,点击“截取快照”按钮,可以新增一条一个时刻的内存使用情况的数据。
在这里插入图片描述

快照比较

截取多个内存使用数据之后,点击某一个,可以与之前的数据比较。
在这里插入图片描述

快照分析

互相比较之后,可以看到哪些类型的对象有所增加,能增加了多少字节。
也可以用堆栈的形式,来看哪行代码在申请内存没有释放,有导致泄漏的嫌疑。

堆栈里面的每一行都能点击,能够清楚的看到哪些对象是由哪行代码构造出来造成泄漏的。
在这里插入图片描述

经验总结

最终我们游戏的泄漏是发生在最近的一个脚本底层的C++ 代码的改动,在某一处 new [] 了一些对象,而没有 delete[] 干掉导致的。

VisualStudio2015 自带的内存使用率分析工具非常好用,可以完全不去用 VLD 等等之类的第三方软件了。
个人的直观感受比 xcode 的 instrument 的 leak 工具还要方便。
新版的 VS2017, VS2019 的诊断工具又有了什么变化不得而知,有机会要去了解一下。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值