内存检测工具使用(Linux、VS)

一、Linux中内存检测工具(valgrind)

内存检查工具: valgrind
linux上在线安装:yum install valgrind
使用方法:
    valgrind 你的程序
    或者
     valgrind  --leak-check=full --show-reachable=yes  --track-origins=yes   你的程序


二、VS中内存检测工具(VLD -- Visual Leak Detector)

下载安装 vld  下载地址:https://vld.codeplex.com/releases ,下载完成后双击安装,安装过程中请注意一个弹框:


建议选是,他会自动帮我们在系统的环境变量里添加vld的动态链接库,如果选否也可以,要自己去手动添加(如果你不是过度蛋疼的话推荐点“是”)。

其次 安装完成 我们来配置VS 2012

在我们的项目上右击——>属性——>配置属性——>VC ++ 目录——> 分别 在 包含目录 和 库目录 添加 vld安装目录的include和lib




ps:这里需要注意 具体是Win32 还是 Win64 根据自己的系统决定(这个决定了你最后编译能否通过,如果最后未找到vld_x86.dll or vld_x64.dll 请修改这一步的lib库)。

OK 添加头和库成功,现在我们在vs里面来玩一玩:

找到程序入口main.cpp 

添加引用头   #include <vld.h> (添加是否成功,可以光标在  vld.h 上 shift+alt+G 进入,如果正常打开vld.h 说明配置正确)



然后我们在HelloWorldScene的 init()方法里故意搞个内存泄漏以便测试

CCLabelTTF *lab2 = new CCLabelTTF();

int *p = new int();


(为了增加说服力,故意多搞了一个整形的,看看是不是能检测到我大整形的4个字节)


OK ,下面来看我们的运行结果:启动调试——>执行到我检测内存泄漏的页面——>停止调试 (这里需要注意,只有你的页面和方法执行过才能检测是否内存泄漏,哥们你千万别启动一下,关了,然后欢天喜地的告诉大家,好牛比,你的程序一个内存泄漏都没有,阿弥陀佛……)。


从输出我们已经成功检测到 有两次内存泄漏,一个4个字节的int  和一个524个字节的CCLabelTTF,当你双击下面的栈他会自动定位到问题相关的代码行,OK ,下面我们来把这两个泄漏干掉,看看是否还有问题

PS: 再次在说明一下,

CCLabelTTF是cocos2d-x的内部类,释放有 lab2->release();  当然可以用int一样的c++语法delete 释放 :

delete lab2;
delete p;

我们再来运行一次


OK,意料之中,一切正常。


参考:http://blog.csdn.net/yangjingui/article/details/9768927


一、Linux中内存检测工具(valgrind)

内存检查工具: valgrind
linux上在线安装:yum install valgrind
使用方法:
    valgrind 你的程序
    或者
     valgrind  --leak-check=full --show-reachable=yes  --track-origins=yes   你的程序


二、VS中内存检测工具(VLD -- Visual Leak Detector)

下载安装 vld  下载地址:https://vld.codeplex.com/releases ,下载完成后双击安装,安装过程中请注意一个弹框:


建议选是,他会自动帮我们在系统的环境变量里添加vld的动态链接库,如果选否也可以,要自己去手动添加(如果你不是过度蛋疼的话推荐点“是”)。

其次 安装完成 我们来配置VS 2012

在我们的项目上右击——>属性——>配置属性——>VC ++ 目录——> 分别 在 包含目录 和 库目录 添加 vld安装目录的include和lib




ps:这里需要注意 具体是Win32 还是 Win64 根据自己的系统决定(这个决定了你最后编译能否通过,如果最后未找到vld_x86.dll or vld_x64.dll 请修改这一步的lib库)。

OK 添加头和库成功,现在我们在vs里面来玩一玩:

找到程序入口main.cpp 

添加引用头   #include <vld.h> (添加是否成功,可以光标在  vld.h 上 shift+alt+G 进入,如果正常打开vld.h 说明配置正确)



然后我们在HelloWorldScene的 init()方法里故意搞个内存泄漏以便测试

CCLabelTTF *lab2 = new CCLabelTTF();

int *p = new int();


(为了增加说服力,故意多搞了一个整形的,看看是不是能检测到我大整形的4个字节)


OK ,下面来看我们的运行结果:启动调试——>执行到我检测内存泄漏的页面——>停止调试 (这里需要注意,只有你的页面和方法执行过才能检测是否内存泄漏,哥们你千万别启动一下,关了,然后欢天喜地的告诉大家,好牛比,你的程序一个内存泄漏都没有,阿弥陀佛……)。


从输出我们已经成功检测到 有两次内存泄漏,一个4个字节的int  和一个524个字节的CCLabelTTF,当你双击下面的栈他会自动定位到问题相关的代码行,OK ,下面我们来把这两个泄漏干掉,看看是否还有问题

PS: 再次在说明一下,

CCLabelTTF是cocos2d-x的内部类,释放有 lab2->release();  当然可以用int一样的c++语法delete 释放 :

delete lab2;
delete p;

我们再来运行一次


OK,意料之中,一切正常。


参考:http://blog.csdn.net/yangjingui/article/details/9768927


猜你喜欢

转载自blog.csdn.net/mao834099514/article/details/78405777