我正在使用Delphi 7调试一个大型应用程序的内存使用情况。我已经成功安装了fastmm debug full dll,并解决了一些泄漏问题。
我还安装了内存使用跟踪器,可以让我看到分配了哪些块以及它们的大小。
我的问题是,有没有办法找出这些块是在哪里分配的?我知道这是可能的,因为如果内存没有被释放,会打印出堆栈跟踪。有没有一种方法可以“poke” fastmm,使其打印给定分配的堆栈跟踪?
附带问题:如果已知分配的起始地址,有没有办法找出对象所属的类?(假设分配是为对象进行的)。
LogAllocatedBlocksToFile
过程。如果它的ALastAllocationGroupToLog
参数小于AFirstAllocationGroupToLog
或为零,则记录所有块以及它们的分配调用堆栈。但是,如果您的应用程序有许多内存分配,请准备等待很长时间。我经历了大约4小时的等待时间和1.5GB的结果文件。(附注:使用glogg查看这样大的文件)FastMM4.pas
,使实现的LogCallStack
在接口中可见。或者你可以直接从FastMM_FullDebugMode.dll
中使用它。DetectClassInstance
函数。