精华内容
下载资源
问答
  • C++ 检测内存泄露工具 -- Windows平台-附件资源
  • memprofilerinstaller5_6_30--C#正版检测内存泄露工具..............................To install the software, run MemProfilerInstaller5_6_46.exe. This is a standard Windows installer. The installation can ...
  • java检测内存泄露工具--jprofiler5 里面含破解注册码,按照使用说明即可使用!
  • C++ 检测内存泄露工具 -- Windows平台

    千次阅读 2016-01-29 14:13:57
    C++ 检测内存泄露工具 -- Windows平台 平台:Windows7 64bit,编译器G++(mingw) 工具:Dr Memory,项目主页:https://code.google.com/p/drmemory/ (可能要FQ,可能会很慢,所以,可以直接按照...

    C++ 检测内存泄露工具 -- Windows平台

    平台:Windows7 64bit,编译器G++(mingw)

    工具:Dr Memory,项目主页:https://code.google.com/p/drmemory/ (可能要FQ,可能会很慢,所以,可以直接按照下面官方主页给出的链接下载,我也放了一份Windows版的在百度网盘,http://pan.baidu.com/s/1qWv2tZm,这个应该肯定可以下载)

    The latest versions can be directly accessed here:

    2014-08-30日摘录于https://code.google.com/p/drmemory/wiki/Downloads?tm=2

    用法类似于Linux下的Valgrind,非常简单

     测试代码:

    复制代码
    #include <cstdio>
    int main(int argc, const char *argv[])
    {
        char *s;
        s = new char[100];
        return 0;
    }
    复制代码

    用g++编译,g++ test.cpp -o test (貌似必须有-o选项指定输出文件名,用g++ test.cpp会生成a.exe,但是用drmemory会导致显示"a.exe停止工作")

    执行drmemory test.exe

    这样应该就会生成一个报告,可以看到Error #1: LEAK 100 direct bytes 0x00c80ea8-0x00c80f0c + 0 indirect bytes

     

     

    关于微软的App Verifier,http://msdn.microsoft.com/en-us/library/windows/hardware/ff551063(v=vs.85).aspx, 按照说明可以下载其中的debugging tool,安装成功后,搞了半天也没学会怎么用……

    我是用mingw的工具编译和调试,g++ file.cpp -o file,生成exe,打开App Verifier,添加这个exe,执行gdb file.exe,run的时候确实看到说App Verifier enable了,但是无论是运行过程中还是运行之后都看不到log。很可能是只能和windbg工具一起使用,可能还要用微软的编译器。搜索 “App Verifier 内存泄露”可以得到很多相关文章,比如这篇文章:http://www.zzfjh.com/?p=105 

     

    参考:

    https://code.google.com/p/drmemory/

    http://latedev.wordpress.com/2012/05/19/valgrind-for-windows/


    源文:http://www.cnblogs.com/fstang/p/3946294.html

    展开全文
  • CodeSnitch(wince windows mobile)平台下检测内存泄露工具 到下面的网页申请15天试用 http://www.entrek.com/EvalForm.asp 文件里面有使用方法,因为试用版的一些限制,可以通过里面附带的另一个小工具解除
  • Visual Leak Detector是一款Visual C++的检测内存泄露工具,很经典 这里网址里面有介绍http://www.360doc.com/content/08/1128/11/59141_2010512.shtml 它是一个打包的lib,cocos中添加一下头文件, 另外...

    Visual Leak Detector是一款Visual C++的检测内存泄露工具,很经典

    这里网址里面有介绍http://www.360doc.com/content/08/1128/11/59141_2010512.shtml

    它是一个打包的lib,cocos中添加一下头文件,

    另外,多个dll,需要每个都添加。比如libCocos2d,libCocosDenshion需要分别添加,程序关闭的时候就能看到内存泄露信息

    展开全文
  • 昨天在公司本想安装purify工具来测试下程序是否有内存泄露,和平时安装步骤一样安装完在 ~/ngin/bin目录下执行 ./container.pf 110(这是业务容器号,通过前命令拉起该容器进程才能检测程序)时,很快下面就出现 ...
  • 内存泄露检测工具

    2017-12-02 16:21:53
    内存泄露检测工具,帮助程序员自动化检测内存泄露,定位内存泄露位置,快速方便的排除内存泄露问题。
  • 检测内存泄露工具

    2013-01-28 09:17:08
    内存泄露进行检测的源码,但是先声明这不是我的原创
  • 上篇说了一些性能优化的理论部分,主要是回顾一下,有了理论,小平同志又讲了,实践是检验真理的唯一标准,对于内存泄露的问题,现在通过Android Studio自带工具Memory Monitor 检测出来。性能优化的重要性不需要在...

    上篇说了一些性能优化的理论部分,主要是回顾一下,有了理论,小平同志又讲了,实践是检验真理的唯一标准,对于内存泄露的问题,现在通过Android Studio自带工具Memory Monitor 检测出来。性能优化的重要性不需要在强调,但是要强调一下,我并不是一个老司机,嘿嘿!没用过这个工具的,请睁大眼睛。如果你用过,那么就不用在看这篇博客了。

    先看一段会发生内存泄露的代码

    public class UserManger {
    
        private static UserManger instance;
    
        private Context context;
    
        private UserManger(Context context) {
            this.context = context;
        }
    
        public static UserManger getInstance(Context context) {
            if (instance == null) {
                instance = new UserManger(context);
            }
            return instance;
        }
    }
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            UserManger userManger = UserManger.getInstance(this);
        }
    }

    代码很简单,就是一个单利模式泄露的场景,我们现在的关心的不是代码本身,而是如何将代码里面的内存泄露给找出来。但是对于上面的代码发生内存泄露的原因还是有必要提一下。

    上篇博客说了,内存泄漏产生的原因是:当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而就导致,对象不能被回收。这种导致了本该被回收的对象不能被回收而停留在堆内存中,就产生了内存泄漏。

    在上面的代码中,发生泄露的不是UserManger,而是MainActivity,UserManger中有一个静态成员instance,其生命周期和应用程序的生命周期一致,当退出应用时,才能被销毁,但是当GC准备回收MainActivity时,结果呢MainActivity的对象(this)在被UserManger所引用,UserManger本身又不能被干掉,所以就发生了内存泄露。


    monitors.png


    Memory Monitor是Android Monitors中的一种,Monitors主要包括四种,Memory Monitor ,CPU Monitor ,NetWork Monitor, GPU Monitor ,今天介绍的是Memory Monitor ,其他的Monitor,在后面也准备讲。

    • Memory Monitor界面

    Memory Monitor.png
    • 图中水平方向是时间轴,竖直方向是内存的分配情况
    • 图中深蓝色的区域,表示当前正在使用中的内存总量,浅蓝色或者浅灰色区域,表示空闲内存或者叫作未分配内存。
    • 内存分析的工具栏,从上向下一共4个按钮,依次是:
      1. Enable 终止检测的开关,没什么实质性的作用

        InitGC 就是手动调用GC,我们在抓内存前,一定要手动点击 Initiate GC按钮手动触发GC,这样抓到的内存使用情况就是不包括Unreachable对象的(Unreachable指的是可以被垃圾回收器回收的对象,但是由于没有GC发生,所以没有释放,这时抓的内存使用中的Unreachable就是这些对象)

        DumpHeap (Dump Java Heap)点击可以生成一个文件(包名+日期+“.hprof”),可以记录摸一个时间点内,程序内存的情况。获取hprof文件(hprof文件是我们使用MAT工具分析内存时使用的文件),但这里直接产生的文件MAT还不能直接使用,需用转换成标准的hprof文件。可以使用AndroidStudio转换或者用hprof-conv命令转化,网上可以查到

        AllocTrack 开始分配追踪,第一次点击可以指定追踪内存的开始位置,第二次点击可以结束追踪的位置。这样我们截取了一段要分析的内存,等待几秒钟AndroidStudio会给我们打开一个Allocation视图(感觉和MAT工具差不多,不过MAT工具更加强大,我们也可以获取hprof文件,使用MAT来分析)

    回到我们的程序,多点击几次GC,看一下这个应用的内存使用情况。


    内存使用情况.jpg

    可以看到现在已经分配的内存有19.68M,我把手机旋转一下,在看。


    旋转后内存使用情况.png

    可以看到现在的内存使用量是21.09M,还是一样的界面,却多了1.41M!!!这很关键。

    接下来,我们找一下,哪里发生了泄露。点击Dump Java Heap,生成快照文件tool.test.memory.memoryleak_2016.11.13_21.38.hprof,Android Studio 自动弹出HPROF Viewer来分析它。


    快照文件分析.png

    现在介绍一下HPROF Viewer的用法

    • HPROF Viewer查看方式
      左上角两个红框,是可选列表, 分别是用来选择Heap区域, 和Class View的展示方式的.
      Heap类型分为:
      App Heap -- 当前App使用的Heap
      Image Heap -- 磁盘上当前App的内存映射拷贝
      Zygote Heap -- Zygote进程Heap(每个App进程都是从Zygote孵化出来的, 这部分基本是framework中的通用的类的Heap)
      Class List View -- 类列表方式
      Package Tree View -- 根据包结构的树状显示

    我通常点击App heap下面的Classs Name把Heap中所有类按照字母顺序排序,然后按照字母顺序查找。

    • HPROF Viewer主要分ABC三大板块
      板块A:这个应用中所有类的名字
      版块B:左边类的所有实例
      板块C:在选择B中的实例后,这个实例的引用树
    • A板块左上角列名解释
    列名解释
    Class Name 类名,Heap中的所有Class
    Total Count 内存中该类这个对象总共的数量,有的在栈中,有的在堆中
    Heap Count 堆内存中这个类 对象的个数
    Sizeof 每个该实例占用的内存大小
    Shallow Size 所有该类的实例占用的内存大小
    Retained Size 所有该类对象被释放掉,会释放多少内存
    • B板块右上角上角列名解释
    列名解释
    Instance 该类的实例
    Depth 深度, 从任一GC Root点到该实例的最短跳数
    Dominating Size 该实例可支配的内存大小

    B板块右上角有个"的按钮, 点击会进入HPROF Analyzer的hprof的分析界面:


    Analyzer Tasks.png

    点击Analyzer Tasks右边的绿色运行箭头,Android Studio会自动的根据此hprof文件分析有哪些类是有内存泄漏的,如下图所示:


    下面分析一下MainActivity的泄露情况

    MainActivity发生内存泄露.png
    在这个界面中可以直接把内存泄露可能的类找出来。
    • 一个Activity应该只有一个实例,但是从A区域来看 total count的值为2,heap count的值也为2,说明有一个是多余的。
    • 在B区域中可以看见两个MainActivity的实例,点击一个看他的引用树情况
    • 在C区域中可以看到MainActivity的实例Context被UserManger的 instance引用了,引用深度为1.
    • 在Analyzer Tasks 区域中,直接告诉你Leaked Activities,MainActivity包含其中

    多方面的证据表明MainActivity发生了内存泄露

    解决方案

    public class UserManger {
    
        private static UserManger instance;
    
        private Context context;
    
        private UserManger(Context context) {
            this.context = context;
        }
    
        public static UserManger getInstance(Context context) {
            if (instance == null) {
                if(context!=null){
                    instance = new UserManger(context.getApplicationContext());
                }
            }
            return instance;
        }
    }

    不要用Activity的Context,因为Activity随时可能被回收,我们用Application的Context,Application的Context的生命周期是整个应用,不回收也没有关系。

    Memory Monitor获得内存的动态视图,Heap Viewer显示堆内存中存储了什么,可惜Heap Viewer不能显示你的数据具体分配在代码的何处,如果还不过瘾,想知道具体是哪些代码使用了内存,还有一个功能是Allocation Tracker,用来内存分配追踪。在内存图中点击途中标红的部分,启动追踪,再次点击就是停止追踪,随后自动生成一个alloc结尾的文件,这个文件就记录了这次追踪到的所有数据,然后会在右上角打开一个数据面板
    Allocation Tracker启动追踪


    Allocation Tracker启动追踪.png

    Allocation Tracker查看方式


    Allocation Tracker查看方式

    有两种查看方式,默认是Group by Method方式

    • Group by Method:用方法来分类我们的内存分配
    • Group by Allocator:用内存分配器来分类我们的内存分配

    从上图可以看出,首先以线程对象分类,Size是内存大小,Count是分配了多少次内存,点击一下线程就会查看每个线程里所有分配内存的方法

    • Group by Method方式


      每个线程里所有分配内存的方法.png


      OK,-Memory Monitor

    • Group by Allocator方式


      EY%HY_B74%BUE22C6$G~CTP.png


      右键可以直接跳到源码

    - 扇形统计图


    AQFHT$@7TYP0S_1`DU@%S%6.png

    点击统计图按钮,会生成上图,扇形统计图是以圆心为起点,最外层是其内存实际分配的对象,每一个同心圆可能被分割成多个部分,代表了其不同的子孙,每一个同心圆代表他的一个后代,每个分割的部分代表了某一带人有多人,你双击某个同心圆中某个分割的部分,会变成以你点击的那一代为圆心再向外展开。

     

    Memory Monitor可以发现的问题

    Memory Monitor工具为监控工具,是一种发现型或者说监控性质的工具,比如医生的四大技能[望闻问切],[望]是第一步。这里的Memory Monitor就是一种[望]的工具,目前我主要用它来看下面几个内存问题:
    1.发现内存抖动的场景
    2.发现大内存对象分配的场景
    3.发现内存不断增长的场景
    4.确定卡顿问题是否因为执行了GC操作

    案例分析

    这里写图片描述

    上面的第一段标记显示内存突然增加了7M,我们也能看的很清楚,所以这个点我们要去定位了一下问题在哪里,是Bitmap还是什么原因造成的,第二段标记是内存抖动,很明显在很短的时间了发生了多次的内存分配和释放。而且在发生内存抖动的时候,也能感觉到App的卡顿,可以看出来是由于执行了GC操作造成的。
    内存的不断增加通过Memory monitor很容易看出来,蓝色的曲线是一路高歌猛进的,一看便知。

    转载于:https://www.cnblogs.com/ldq2016/p/8472261.html

    展开全文
  • gperftools工具检测内存泄露

    万次阅读 2018-05-07 20:07:46
    gperftools是google开发的一款...基于tcmalloc的堆内存检测内存泄漏分析工具heap-profiler,heap-checker;基于tcmalloc实现的程序CPU性能监测工具cpu-profiler.gtihub地址:https://github.com/gperftools/gperft...

    gperftools是google开发的一款非常实用的工具集,主要包括:性能优异的malloc free内存分配器tcmalloc;基于tcmalloc的堆内存检测和内存泄漏分析工具heap-profiler,heap-checker;基于tcmalloc实现的程序CPU性能监测工具cpu-profiler.

    gtihub地址:https://github.com/gperftools/gperftools

    上述所说的三种工具在我们服务器进程的性能分析监控,定位内存泄漏,寻找性能热点,提高malloc free内存分配性能的各个方面上都有非常成功的使用经验.

    heap-profiler是内存监控器,heap-checker用来检测内存泄露,cpu-profiler用来分析cpu性能,具体安装方式参考https://blog.csdn.net/oujiangping/article/details/77172802 或者 github文档

    使用heap-checker来检测内存泄露,参考gperftools/docs/heap_checker.html文档。

    检测的方式有两种,一种是需要把tcmalloc库编译进工程,另一种不需要编译进工程,只需要在运行时通过LD_PRELOAD命令加载tcmalloc库。官方推荐第一种方法,第二种方式存在安全问题。

    第一种方式,在makefile文件中编译进tcmalloc库,运行如下命令

    env PPROF_PATH=./objs/pprof HEAPCHECK=normal ./application


    第二种方法,

    envLD_PRELOAD="/home/zhengbin/gperf/lib/libtcmalloc.so" PPROF_PATH=../../gperf/bin/pprof HEAPCHECK=normal ./application

    PPROF_PATH为检测工具路径,application为可执行程序


    本文检测的是服务程序整个程序的内存泄露情况,检测工具会在程序退出时检测,因此需要程序从main函数中正常退出,


    在程序中增加中断信号处理函数保证程序正常退出,打印检测结果:CTRL+C 或者发送SIGINT信号给程序.

    下图所示检测结果中,显示有三处内存泄露,并且有函数堆栈信息。通过运行提示中的命令可以查看更heap文件中详细的信息,--gv去掉,进入命令后执行top命令。


    展开全文
  • valgrind检测内存泄露

    2013-09-05 08:46:00
    简介: valgrind检测内存泄露工具。功能非常强大,具体详见http://www.valgrind.org/。 这里只介绍内存检测部分。 参考实例: http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/ 安装: ① 下载 ...
  • Dmalloc检测内存泄露

    2013-09-05 08:29:00
    简介: Dmalloc检测内存泄露工具。 安装: ① 下载 http://dmalloc.com/releases/  ② 安装 tar zxvf dmalloc-5.5.2.tgz cd dmalloc-5.5.2 ./configure --prefix=/usr make make install 使用: ① 环境...
  • windows内存泄露检测,VLD(Visual Leak Detector)是一款用于 Visual C++ 的免费内存泄露检测工具。内寸泄露检测神器。
  • 简单介绍在Linux环境下检测程序内存泄露工具的用法
  • 检测内存泄露

    2014-01-01 16:12:35
    C++程序的复杂性很大一部分在于他的内存管理,没有C#那样的垃圾回收机制,内存...本文描述了如何检测内存泄露。最主要的是纯C,C++的程序如何检测内存泄露。 现在有很多专业的检测工具,比如比较有名的BoundsCheck,
  • 1.检测内存泄露工具 2. 不需要代码,能定位出泄漏的出处,精确到代码文件的某行 3. 非打桩类
  • vld 内存泄露检测工具

    2014-03-13 10:57:59
    Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具
  • 非常好用的内存泄露检测工具,只需不到1M的安装空间,即可在代码中进行检测内存泄露问题。
  • C++ 检测内存泄露

    2019-09-24 10:42:31
    本文描述了如何检测内存泄露。最主要的是纯C,C++的程序如何检测内存泄露。  现在有很多专业的检测工具,比如比较有名的BoundsCheck, 但是这类工具也有他的缺点,我认为首先BoundsCheck是商业软件,呵呵。然后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,805
精华内容 722
关键字:

检测内存泄露工具