使用visual studio检查memory leak

visual studio mode 设定debug mode开启诊断工具
侦错->视窗->开启诊断工具

若有请你enable诊断工具就点击enable

标籤选择记忆体使用量

在程式的开始以及结尾设定断点

F5执行第一次断在第一行,并点击撷取快照

F5执行第二次以后再点击撷取快照

点击第二次快照上升箭头旁边的数字

这个上升的数字跟箭头不管有没有leak都会显示出来,还没有认真去研究这是代表什么意义

查看memory leak的buffer

报告会显示有memory leak的型态以及大小,CL的buffer也可以检测出来。若没有leak就不会显示。

若要寻找memory leak就把code慢慢关掉,重複以上步骤看他还存不存在了。

注意C++的STL

由于以上方法是使用第一个断点以及第一个断点在heap memory里面的difference作为判断上升的依据,
因此在检查leak时我们必须注意如C++的STL是否跳出生命週期而释放记忆体
如同以下範例

std::string s; 在自己的建构函式会去配置记忆体,
而在main结束后才会跳出生命週期,
呼叫解构函式。
因此如果你是如上图的code这样测试,就会显示尚有记忆体未释放。

因此我们只要把code改成如下

#include <iostream>using namespace std;void test(){std::string s;}int main(){printf("start\n");test();printf("end");return 0;}

将你的main code再用一个函式包装起来,断点设在printf("start\n");以及printf("end");
就可以顺利的检查memory leak而不会显示这些C++的STL了

reference : https://stackoverflow.com/questions/4790564/finding-memory-leaks-in-a-c-application-with-visual-studio


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章