如何获取自定义结构体的名称,其实例已泄漏内存?

20

我正在开发一个解析器,用于处理 FASTMM4 内存泄漏报告并将所有相关数据存储在自定义的结构/类中。我使用 VirtualTreeView 将每个有泄漏实例的类显示为树中的一个节点。 这个树形结构 - 请注意,第一个节点显示为 UNKNOWN。这是因为 FASTMM 调用了一个名为 AClass 的方法来确定它是否为类。当它发现自定义的结构时,它将它们标记为未知,这使得我的报告分析器不太有效,因为大多数内存泄漏都来自于这些自定义结构和记录。

问题:是否可以使用 DebugInfo 或其他工具(如JVCL)来收集那些调试符号,并将它们的内存地址与在内存泄漏报告文件中找到的地址进行比较?我希望我的树形结构停止显示 UNKNOWN 并显示这些自定义结构的名称。 我是 Delphi 编程的新手,也是初次处理内存泄漏,所以任何帮助都会非常感激!


2
http://jvcl.delphi-jedi.org/ http://www.lischke-online.de/index.php/controls/virtual-treeview @TLama 谢谢 :) - programstinator
1
这可能是AppendClassNameToBuffer函数吗?这只是一个猜测,我从未使用过FastMM内部,所以不要认真对待。 - TLama
1
这个工具看起来很酷。你会把它开源吗? - Jlouro
1
这个工具将是开源的。我修复了一些错误后,我会发布代码链接。@Hendra 不幸的是,上述函数 AppendClassNameToBuffer 并不那么智能,恐怕无法实现。 - programstinator
2
@SertacAkyuz - 你说得对,我会编辑标题,因为我有更好的机会与FMM一起使用其他工具,而不是搞乱FMM内部。 - programstinator
显示剩余4条评论
1个回答

1
也许可以利用扩展运行时类型信息(Delphi 2010及以上版本)创建一个类型字典,其中仅包含所有“非类”类型的类型信息指针和名称。
为了避免在正常操作中产生额外开销,可以通过条件定义来启用此功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接