Deleaker

English version below.

Deleaker je nástroj od společnosti Softanics, který pomáhá programátorům a vývojářům s detekcí a proaktivním řešením problémů spojených s alokací a uvolňováním paměti. Název vychází z termínu "Memory leak", což je neduh provázející vývoj aplikací od jeho samotného počátku. Nástroj byl původně navržen jako zásuvný modul pro MS Visual Studio, ale v roce 2019 se implementace dočkalo i Embarcadero RAD Studio. Deleaker je tak k dispozici jak pro Delphi tak C++Builder a to i jejich starší verze. Nejstarší podporovaná vydání jsou Delphi 7 a C++Builder 6.

Ač jsou Memory leaky relativně běžnou záležitostí, jejich identifikace nemusí být vždy tak snadná, jak by se čekalo. Jak memory leak vzniká? Zjednodušeně řečeno jde nejčastěji o situace, kdy program po svém ukončení neuvolní paměť, kterou si pro svou práci vyhradil. Viníkem může být funkce nebo procedura, která například vytvořila instanci objektu, ale již nezajistila jeho korektní likvidaci. Chyby se často objevují také při předávání objektů ať již odkazem nebo hodnotou. Samostatnou kapitolou je pak paralelní zpracování úloh, nebo "cizí" kód v externích knihovnách či komponentách.

Vznik Memory leaků může způsobit celou řadu problémů:

  • Růst alokované paměti zpomaluje systém a omezuje běh ostatních aplikací a procesů
  • Jsou generována chybová hlášení, jako je přetečení zásobníku a podobné zprávy
  • Situace může vyústit "zamrznutím" aplikace a ta tak není dostupná uživatelům
  • Zhroutí se celý systém a vynucený restart může být příčinou ztráty dat

Deleaker se integruje přímo do prostředí jako zásuvný modul. Podporována je nejen aktuální verze 10.4 Sydney, ale pomůže Vám i s projekty ve starších vydáních. Nejstarší podporovaná IDE jsou RAD Studio 2007, Delphi 7 a C ++ Builder 6.0. Pro jazyk C++ podporuje Deleaker i prostředí MS Visual Studio a Qt Creator. Instalace je rychlá a jednoduchá. Změnit lze umístění programu, název skupiny a to, zda se má vytvořit zástupce na ploše. Pokud se spokojíte s výchozím nastavením, proběhne vše automaticky, včetně detekce vašeho vývojového prostředí a jeho verze. Pokud Deleaker zjistí přítomnost více verzí, můžete jednoduše vybrat, do kterých jej chcete integrovat.

Po spuštění vývojového prostředí naleznete v jeho hlavní nabídce Deleaker jako novou položku.

Deleaker

Nástroj lze používat ve dvou módech. Jako již zmíněný zásuvný plug-in z přímo z vývojového prostředí, nebo samostatně jako desktopovou aplikaci. V takovém případě můžeme profilovat libovolnou existující aplikaci. Pro vývojáře je samozřejmě zajímavější první z variant. Profilování zahájíme spuštěním aplikace, kterou chceme profilovat. Aplikaci je třeba spustit z IDE a v ladícím (debug) módu. Následně otevřeme Deleaker a pomocí tlačítka "Take Snapshot" vytvoříme snímek paměti. Deleaker prozkoumá všechny alokace, které jsou k danému okamžiku provedeny. Detekované problémy lze filtrovat podle typu a dalších atributů. Dále získáte přehled všech procesů, modulů nebo instancí objektů včetně jejich velikosti. K dispozici je graf čerpání zdrojů a log operací.

Pro každý problém je vypsána jednotka a řádek, na kterém byl detekován. Pro každý z těchto záznamů si lze jedním kliknutím zobrazit zdrojový kód.

Deleaker

Snímky paměti můžeme vytvářet opakovaně v libovolné fázi běhu aplikace. Díky tomu je možné zaměřit se na problematické situace a oblasti aplikace. Deleaker navíc nabízí porovnávání pořízených snímků, což výrazně usnadňuje nalezení chyb. Poslední snímek vytváří Deleaker automaticky při ukončení aplikace.

Deleaker je placený nástroj. Avšak vzhledem k tomu, že především u větších projektů může vývojářům ušetřit řadu bezesných nocí, se jedná o dobrou investici.

Deleaker

Deleaker is a tool from Softanics company that helps programmers and developers with detection and proactive solutions of the problems regarding allocating and releasing the memory. Its name comes from the term "Memory leak" which is a bottleneck intertwined with the app development since the square one. This tool had been originally designed as a plug-in module for Microsoft Visual Studio but in 2019 was implemented into Embarcadero RAD Studio as well. Actually, Deleaker is available for Delphi and C++ Builder from versions Delphi 7 respectively C++ Builder 6 and higher.

Although the memory leaks are a quite common issue, their identification may not be as easy as one could expect. What are the basics of the memory leak? Simply said, there are the issues when the programme does not release the allocated memory after it is terminated. As a culprit can be regarded a function or a procedure that - such as - reserved an instance of an object but did not manage its correct destruction. Further errors occur during forwarding the object, either by reference or by value. Another story is parallel processing of tasks or foreign code in external libraries or components.

There are many problems induced by memory leaks:

  • the growth of allocated memory slows the system down and limits running of other apps and processes
  • Joccurrence of the error messages like stack overflow etc.
  • freezing of the application so that it is available for users not any longer
  • the collapse of the entire system and its forced restart could cause the loss of data

Deleaker integrates itself as a plug-in module into development environment. Not only actual version of Delphi 10.4 Sydney but even older versions of IDE can collaborate with Deleaker. The oldest supported versions are RAD Studio 2007, Delphi 7 and C++ Builder 6. As for C++ language, integration into MS Visual Studio and Qt Creater IDEs is also available. The installation is rapid and easy, it is allowed to change destination directory for Deleaker, the name of the program group and whether a shortcut on the desktop shall be created. In the case you choose an automatic installation, everything will perform in the background, including your IDE detection. If Deleaker detects more versions of supported IDEs, you can choose easily into which of them shall Deleaker be integrated.

Once the IDE is started, a new item with Deleaker functionality appears in the main menu.

Deleaker

The developers find - as a matter of fact - first way more interesting. Profiling can be launched by running the concerned app within IDE in debug mode. In the next step, you open Deleaker and create a memory snaphot by clicking Take Snaphot button. Delaker will explore and inspect all allocations that are available at the moment. Detected issues can be filtered by their types or other attributes. Deleaker offers handy lists of processes, modules or object instances including their size. Operation log and chart visualizations are available too.

Information about concerned unit and row number is available for each memory problem. The source code close-knit with the issue can be displayed within one mouse click.

Deleaker

The memory snapshots can be created repeatedly in any phase of application run. Thanks to this feature developers can focus on problematic situations and critical parts of the app. In addition, Deleaker offers snaphots comparison what simplifies the locating of the errors in a very significant way. The last snaphot is created automatically at the moment of the termination the app.

Deleaker is a paid tool. Nevertheless, it is worth the price and especially in case of larger projects allows the developer to avoid many white nights.

About the Author

Petr Houf
www.embt.cz