How to obtain the names of custom-made structures whose instances have leaked memory?
Asked Answered
V

1

20

I am working a on parser which will go through a FASTMM4 memory leak report and store all relevant data in a custom-made structure/class. I use VirtualTreeView to display each class that has leaked instances as a node in the tree. The tree - Notice that the FIRST node says unknown. This is because FASTMM calls a method AClass to determine weather it is a class or not. When it finds custom structures, it marks them as unknown, which doesn't make my report analyzer very effective since most memory leaks come from these custom structures and records.

Question: Is there a way to use DebugInfo or some other tool like JVCL to gather those debug symbols and compare their memory addresses to the ones found in the memory-leak-report-file? I would like my tree to stop showing UNKNOWN and show the names of these custom structures. I am new to Delphi programming, and even newer to tackling memory leaks, so any help would mean much!

Vitia answered 21/9, 2012 at 23:19 Comment(9)
jvcl.delphi-jedi.org lischke-online.de/index.php/controls/virtual-treeview @TLama thanks:)Vitia
Couldn't that be the AppendClassNameToBuffer function ? It's just a wild guess, I've never worked with FastMM internals, so don't take it seriously.Skysweeper
Exactly. That's the one. I'd rather not tinker with FastMM itself, though..Vitia
This is just a wild guess. FastMM comes with a bunch of settings. Maybe there is/are settings that expose UNKNOWN to something more meaningful?Erudite
Are you building your app with enough debug info?Icicle
This tool seems cool. Will you make it opensource ?Archaimbaud
The tool will be open source.. As soon as I fix up a few bugs, I'll post the link to the code. @Erudite Unfortunately, no. The above mentioned function AppendClassNameToBuffer is not that smart, I'm afraid.Vitia
It's too late when AppendClassNameBuffer is called, it expects a class, and if there's no class it's passed nil. AFAICT, the title and question asks very different things. I think the question in the title would require modifying fastmm sources.Slater
@SertacAkyuz - you are right, I will edit the title, because I will have a better chance at using other tools in conjunction with FMM, rather than messing with FMM internals.Vitia
P
1

Maybe extended RTTI (Delphi 2010 an newer) can be used to create a type dictionary, which only holds typeinfo pointers and names of all "non-class" types.

This feature could be enabled with a conditional define to avoid its overhead in normal operation.

Puttier answered 6/12, 2012 at 10:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.