01.12.2016, Vladimír Klaus, navštíveno 4351x
Pokud chcete programovat opravdu poctivě, jednu z věcí, na kterou byste měli dbát, je ošetření úniků paměti. V Delphi je možné hlídání zapnout velmi jednoduše. Jen je vhodné ji mít zapnutou, jen když pracujete z Delphi.
if DebugHook<>0 then ReportMemoryLeaksOnShutdown:=True;
A když pak ukončujete aplikaci, může se objevit takováto hláška.
U menší aplikace se dá poměrně lehce najít v čem a kde je problém. U rozsáhlejší nebo u příliš dlouhého seznamu úniků už to je o dost horší.
Velmi nám může pomoci knihovna FastMM a postup popsaný níže v odkazovaných zdrojích. Já ho zde uvedu krátce, přehledně a na konkrétním příkladu, kde jsem to opravdu sám využil.
Nejprve je třeba stáhnout plnou verzi FastMM knihovny, protože ta, co je součástí Delphi nedostačuje. Pak je třeba se na ni odkázat v projektu a to hned z prvního místa.
program ADC2012;
uses
FastMM4, //<<<<<<< zde to je
Forms,
Windows,
Main in 'Main.pas' {MainForm},
Knihovnu si rozbalte někam, kam na ní bude z projektu vidět. Nejdůležitější jsou tyto 3 soubory:
- FastMM4Options.inc
- FastMM4.pas
- FastMM4Messages.pas
Pak ještě otevřete FastMM4Options.inc, v něm najděte {.$define FullDebugMode} a odstraňte tečku před dolarem, aby se tento parametr při překladu aplikoval.
Také je potřeba, aby se překládalo s parametrem Map file = Detailed.
Poslední věcí, kterou je potřeba udělat, je umístit FastMM_FullDebugMode.dll do systémové složky Windows, což v případě x64 verze je do c:\Windows\SysWOW64\. Případně je možné dát knihovnu přímo k exáči.
Nyní, když spustíme a ukončíme aplikaci, objeví se trochu detailnější informace, která nám stále ale moc nepomůže.
To hlavní co ale vzniká, je soubor ADC2012_MemoryManager_EventLog.txt, který je umístěn přímo u aplikace. V něm po chvilce objevíte řádku, která zřejmě má něco společného s naším problémem.
Pak už stačí najít příslušný soubor ADCConvertor.pas a v něm řádek 224 a je nám hned jasné, jaký že objekt jsme asi zapomněli uvolnit.
Pochopitelně je třeba připomenout, že nejlepší je, když ke krokům zde uvedeným nikdy nebudete muset sáhnout. Správná praxe je vždy taková, že spolu s vytvářením objektu je třeba ihned psát jeho uvolňování. Ale když se někdy spěchá... :-)
Zdroje: