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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM