程序员面临(并希望我们意识到)的常见问题之一是内存泄漏或任何其他类型的资源泄漏。例如,Windows限制了进程一次可以分配的GDI或USER32对象的数量。当事情走错路时,您可能希望拥有一些工具来帮助您(再次)找到自由创建自己的正确路径。

一些IDE具有内置的泄漏检测功能。MS的Visual Studio最近获得了一个工具,可以显示从堆分配的内存块的列表。遗憾地说,但不仅从堆分配可能会泄漏内存,而且还通过COM / ActiveX技术分配的内存和虚拟内存和文件映射视图,等等。不幸的是,Visual Studio根本无法检测到句柄,GDI和USER32资源的泄漏(另一方面,Deleaker可以检测到所有类型的泄漏,并且也可以在Visual Studio中工作)。

RAD Studio没有这样的内置工具。如果在调试期间可以仅单击“魔术”按钮,并查看在何处以及通过什么代码分配了内存,文件和其他描述符,对象,那就太好了。

Deleaker

最近这样的延伸,Deleaker,它可以做所有这一切以及更多,已被释放。最初,Deleaker是作为Visual Studio的扩展而创建的,但从今年开始,它开始支持其他IDE,包括RAD Studio和Qt Creator。

您可以在此处下载Deleaker:https//www.deleaker.com/download.html

安装程序建议将Deleaker添加到计算机上安装的RAD Studio的版本中:

为了进行快速测试,我们创建一个简单的Windows VCL应用程序并向其添加内存泄漏:

1
2
3
4
6
procedure TForm1.FormCreate(Sender: TObject);
var
  stringList: TStringList;
begin
  stringList := TStringList.Create;
end;

然后构建并在调试模式下运行(在调试模式下运行很重要)。返回RAD Studio,找到Deleaker菜单项,选择Deleaker Window。在出现的窗口中,单击“拍摄快照”以获取所有当前分配的列表。其中包括我们的TStringList对象。您可以浏览调用堆栈:

如果切换到“ Delphi对象”选项卡,则可以在其中看到按类分组的对象列表:

关闭应用程序窗口以退出该过程。Deleaker立即开始拍摄快照,这是探究尚未释放哪些内存,哪些对象和其他资源的快照:

另一个有用的功能是比较两个快照。例如,开发人员意识到一个进程会不断消耗内存,而不会将其返还,或者GDI对象的数量越来越多。可以只获取快照并进行浏览,但是获取第一个(基本)快照然后给该过程一些时间来分配新资源要方便得多。最后获得一个新快照,并查看其与基本快照的区别。

例如,让我们添加一个计时器,它每半秒将创建一个新对象并打开一个文件:

1
2
3
4
6
7
8
procedure TForm1.Timer1Timer(Sender: TObject);
var
  StringList: TStringList;
begin
  StringList := TStringList.Create;
  CreateFile('1.tmp', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_DELETE, nil, CREATE_ALWAYS, 0, 0);
  DeleteFile('1.tmp');
end;

开始调试,切换到Deleaker。您可以在图上看到如何分配资源:

让我们拍摄两个快照,选择第一个快照,然后单击“与...比较”以查看区别,即自拍摄第一个快照以来已分配的资源:

因此,快照之间的差异允许查看新的分配,并且非常重要的是命中计数的数量,该数量指示快照分配在代码中的同一位置。

总而言之,Artem Razin(Deleaker背后的开发人员和Softanics的首席执行官)所做的一件出色的工作

现在,当涉及到内存浪费问题时,我是madExceptFASTMM忠实拥护者。我一直在使用这些技术来对抗内存泄漏。

快速浏览,Deleaker是一个有用的扩展,可用于探索内存和其他资源以及查找泄漏。您可以查看特定的分配,甚至可以查看单个对象,并且对于每个对象都可以使用调用堆栈,因此可以轻松找到特定对象或内存的分配位置。试试看。

原链接:http://zarko-gajic.iz.hr/deleaker-memory-leaks-hunter-add-on-for-rad-studio/#more-781

Deleaker – 内存泄漏猎人(RAD Studio 的附加组件)的更多相关文章

  1. 使用 Android Studio 检测内存泄漏与解决内存泄漏问题

    本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...

  2. Android studio 分析内存泄漏

    以前用eclipse的时候,我们采用的是DDMS和MAT,不仅使用步骤复杂繁琐,而且要手动排查内存泄漏的位置,操作起来比较麻烦.后来随着Android studio的潮流,我也抛弃了eclipse加入 ...

  3. 利用Android Studio、MAT对Android进行内存泄漏检测

    利用Android Studio.MAT对Android进行内存泄漏检测 Android开发中难免会遇到各种内存泄漏,如果不及时发现处理,会导致出现内存越用越大,可能会因为内存泄漏导致出现各种奇怪的c ...

  4. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

  5. Cocos性能优化工具的开发介绍Visual Studio内存泄漏检测工具——Visual Leak Detector

    然后,Windows下有什么好的内存泄漏检測工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检測功能.我们能够使用第三方工具Visual Leak Detector(下面简 ...

  6. 使用android studio检测app内存泄漏【转载】

    Android开发中难免会遇到各种内存泄漏,如果不及时发现处理,会导致出现内存越用越大,可能会因为内存泄漏导致出现各种奇怪的crash,甚至可能出现因内存不足而导致APP崩溃. 一般检测android ...

  7. Android Studio +MAT 分析内存泄漏实战

    对于内存泄漏,在Android中如果不注意的话,还是很容易出现的,尤其是在Activity中,比较容易出现,下面我就说下自己是如何查找内存泄露的. 首先什么是内存泄漏? 内存泄漏就是一些已经不使用的对 ...

  8. 打开RAD Studio XE5提示"displayNotification:内存不够"解决办法

    操作方法: 在RAD Studio XE5快捷方式上鼠标右击选择属性,在弹出的快捷方式标签页中将目标(T):"C:\Program Files (x86)\Embarcadero\RAD S ...

  9. 【Visual Studio】简单内存泄漏检测方法 解决 Detected memory leaks! 问题(转)

    原文转自 http://blog.csdn.net/u011430225/article/details/47840647 我的环境是: XP SP2.VS2003 最近在一个项目中, 程序退出后都出 ...

随机推荐

  1. JavaScript == 与 === 区别

    1.对于 string.number 等基础类型,== 和 === 是有区别的 a)不同类型间比较,== 之比较 "转化成同一类型后的值" 看 "值" 是否相等 ...

  2. Linux OOM一二三

    Linux开发一般会遇到“/proc/sys/vm/overcommit_memory”,即文件/etc/sysctl.conf中的vm.overcommit_memory,Overcommit的意思 ...

  3. CTSC 2017 游戏[概率dp 线段树]

    小 R 和室友小 B 在寝室里玩游戏.他们一共玩了 $n$ 局游戏,每局游戏的结果要么是小 R 获胜,要么是小 B 获胜. 第 $1$ 局游戏小 R 获胜的概率是 $p_1$,小 B 获胜的概率是 $ ...

  4. 洛谷P3834题解

    若想要深入学习主席树,传送门. Description: 给定数列 \(\{a_n\}\) ,求闭区间 \([l,r]\) 的第 \(k\) 小的数. Method: 先对数据进行离散化,然后按照权值 ...

  5. 洛谷P1979华容道

    题目 此题目中存在三种棋盘的放置方法(空白,不能活动,能活动). 而每次变化的格子一定在当前空白格子的周围,因此只需要对空白格子的周围四个状态考虑即可,因此我们设\(a[i][j][k]\)为白格子在 ...

  6. Android编程权威指南笔记

    学习android开发,你需要对java语言,包括类,对象,接口,监听器,包,内部类,匿名内部类有所了解. android studio 的下载与安装 可以从android开发者网站下载android ...

  7. 【POJ3278】Catch That Cow

    本题传送门 本题知识点:宽度优先搜索 题意很简单,我们把FJ与奶牛看作是在一条数轴上的点,奶牛固定在K点,FJ的移动有三种,分别是向前一格,向后一格以及跳到当前格的两倍去.问FJ花费最少的时间到达奶牛 ...

  8. 牛顿迭代法(c++)

    编写一个用牛顿法解方程x=tanx 的程序,求最接近4.5和7.7的根 #include <iostream> #include <cmath> using namespace ...

  9. java并发编程(三)cpu cache & 缓存一致性

    一 cpu cache 1. cache的意义    为什么需要CPU cache?因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源.所以cache的出 ...

  10. GuavaCache简介(一)是轻量级的框架 少量数据,并且 过期时间相同 可以用 GuavaCache

    还有一篇文章是讲解redis 如何删除过期数据的,参考:Redis的内存回收策略和内存上限(阿里) 划重点:在GuavaCache中,并不存在任何线程!它实现机制是在写操作时顺带做少量的维护工作(如清 ...