• Deleaker – 内存泄漏猎人(RAD Studio 的附加组件)


    程序员面临(并希望我们意识到)的常见问题之一是内存泄漏或任何其他类型的资源泄漏。例如,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

  • 相关阅读:
    ORALE 误删表 Flashback 恢复表
    C# SAP Connector .NET Framework 4.5 版本下载
    C# VS 调试报错:未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项
    【转载】亚信防毒墙网络版卸载
    CSS 相邻兄弟选择器
    如何衡量一个人的 JavaScript 水平
    this软绑定
    RequireJS
    模块机制
    Javascript 数组循环遍历之forEach
  • 原文地址:https://www.cnblogs.com/rtcmw/p/11598077.html
Copyright © 2020-2023  润新知