CPP内存检测

对C、C++的内存泄露、内存溢出等检查,经过这两天的查资料,总体来说可以使用Valgrind, AddressSanitizer, Dr.Memory等。其中Valgrind对程序运行速度影响较大,运行耗时10倍以上,如果是对Android Native代码进行检查,比较推荐对代码进行必要的修改,编译成可执行文件,在pc Linux系统上检测是否存在内存问题。Dr.Memory则比Valgrind的速度快,比较适合在Windows系统中使用。而对于Android上的使用,Google目前则大力推荐使用AddressSanitizer来替代Valgrind.

Dr.Memory使用

IBM developer一个较好的case

Valgrind使用

参考

参考2

Valgrind包含下列工具:

  1. memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。
  2. callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。
  3. cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。
  4. helgrind:用于检查多线程程序的竞态条件。
  5. massif:堆栈分析器,指示程序中使用了多少堆内存等信息。
  6. lackey:
  7. nulgrind:

    这几个工具的使用是通过命令:valgrand --tool=name 程序名来分别调用的,当不指定tool参数时默认是 --tool=memcheck.

使用:

  1. 在Ubuntu中下载安装Valgrind,sudo apt install valgrind
  2. 把要检测的代码编译成可执行文件,注意编译的时候要带上-g编译命令。比如g++ -g -o testValgrind testValgrind.cpp
  3. 使用Valgrind来检测,valgrind --tool=memcheck --leak-check=full ./testValgrind

AddressSanitizer

这是谷歌目前极力推荐在Android中使用的内存检测工具

VisualStudio检测

如果使用VisualStudio,则有更为简单的方法做一内存泄露检测,但也只能检测内存泄露。代码如下,参考

/*
 * 1:在每个cpp文件中包含base.h头文件,当然直接把base.h的内容复制到cpp中也可以
 * 2:在程序退出的时候调用_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);
 * 3:在VS的debug模式下
 */
#include "base.h"
#include "stdafx.h"
#include <iostream>

int main()
{
    int *a = new int[8];
    int *b = (int *)malloc(8 * 7);
    a[0] = 5;
    a[9] = 99;
    std::cout << a[0];

    _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);
    return 0;
}

/*
//base.h内容
#ifdef _WIN32
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
#endif

#ifdef _WIN32
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
#endif
*/

原文地址:https://www.cnblogs.com/willhua/p/9652907.html

时间: 2024-11-08 07:54:51

CPP内存检测的相关文章

Cocos2d-x开发---关于内存检测

这几天面试的时候,面试官都会问我在游戏开发过程中是如何应对内存检测的,如何监控程序是否有内存泄漏的问题.在开发的过程中也没有认真的注意过这个问题(当然不是说不去关注程序的内存泄漏问题,而是说并没有特意到去思考如何去监控),因为上家公司使用的是xcode开发工具,其自带了性能监控的工具,平时也就是用的这个,可能没太在意这些吧. 因为面试官问这个比较多,然后我感觉自己确实需要多注意注意程序开发过程中的一些基础性问题,所以把自己所知道的整理整理. Mac上: 使用xcode进行开发,当运行模拟器或者进

【调试】Linux下超强内存检测工具Valgrind

[调试]Linux下超强内存检测工具Valgrind 内容简介 Valgrind是什么? Valgrind的使用 Valgrind详细教程 1. Valgrind是什么? Valgrind是一套Linux下,开放源代码(GPLV2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成. 内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具:而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务.

EVC内存检测

将以下代码保存为.h文件,在待检测的应用中调用它. 1 /***************************************************************** 2 为了使用内存检测,需要在待检测代码中进行以下三步: 3 1. Define _DEBUG #define _DEBUG 4 2. Include "crtdbg.h" #include "crtdbg.h" 5 3. Let your first line in the co

Android 内存泄露总结(附内存检测工具)

https://segmentfault.com/a/1190000006852540 主要是分三块: 静态储存区:编译时就分配好,在程序整个运行期间都存在.它主要存放静态数据和常量. 栈区:当方法执行时,会在栈区内存中创建方法体内部的局部变量,方法结束后自动释放内存. 堆区:通常存放 new 出来的对象.由 Java 垃圾回收器回收. 栈与堆的区别 栈内存用来存放局部变量和函数参数等.它是先进后出的队列,进出一一对应,不产生碎片,运行效率稳定高.当超过变量的作用域后,该变量也就无效了,分配给它

内存检测

TBOX的内存分配在调试模式下,可以检测支持内存泄露和越界,而且还能精确定位到出问题的那块内存具体分配位置,和函数调用堆栈. 内存泄露检测 内存泄露的检测必须在程序退出的前一刻,调用tb_exit()的时候,才会执行,如果有泄露,会有详细输出到终端上. tb_void_t tb_demo_leak() { tb_pointer_t data = tb_malloc0(10); } 输出: [tbox]: [error]: leak: 0x7f9d5b058908 at tb_static_fix

思科WLC4402内存检测故障

前几天用户打电话过来,说是重启WLC4402之后,https进不去了,于是让其通过console线接入看看,用户反应,系统在内存检测处停止下来,并提示内存检测错误. 后来用户让IT部的人把4402拿走,并打开,发现在4402里面就插了一根DDR一代的内存512M,费了一翻周折,找到一条DDR1代256M的内存换了上去,重新开机,发现启动正常,进去了!!! 但是高兴的事情总是不能够长久,后来客户反应,guest用户在认证时的页面调不出来,我远程检查了一下配置,确认所有的配置都正常,用户甚至连核心交

C/C++内存检测工具Valgrind

内存检测Valgrind简介 Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O'Reilly开源大奖的Julian Seward, 它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等,内存检测, 我们可以使用它的工具:Memcheck.   Valgrind 安装 方法 1.  valgrind官网:http://valgrind.org下载 方法 2.  Ubuntu  sudo a

Visual Leak Detector 2 2 3 Visual C++内存检测工具

Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显示导致内存泄露的完整内存分配调用堆栈. 主页地址:http://vld.codeplex.com/ 旧版地址:http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio 下载Vis

c++Valgrind内存检测工具---19

原创博文,转载请标明出处--周学伟  http://www.cnblogs.com/zxouxuewei/ 一.Valgrind 概述 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具:而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务.Valgrind的体系结构如下图所示