知道使用FastMM分配内存的位置

wme*_*cer 6 delphi fastmm

我正在尝试使用Delphi 7调试大型应用程序中的内存使用情况.我能够安装fastmm debug full dll并使用它来解决一些泄漏问题.

我还安装了内存使用跟踪器,允许我查看分配了哪些块以及它们的大小.

我的问题是,有没有办法找出块的分配位置?我知道这是可能的,因为如果没有释放内存,则会打印堆栈跟踪.有没有办法在fastmm'戳'让它打印给定分配的堆栈跟踪?

附带问题:如果分配的起始地址已知,有没有办法找出对象是哪个类?(假设分配是针对一个对象的.

Ser*_*lyk 5

您可以:

  • 尝试使用LogAllocatedBlocksToFile程序。如果它的ALastAllocationGroupToLog参数小于AFirstAllocationGroupToLog或为零,则记录所有块及其分配调用堆栈。但是,如果您的应用程序有很多内存分配,请准备好长时间等待。我经历了大约 4 小时的等待时间和 1.5Gb 的结果文件。(旁注:使用glogg查看这么大的文件)
  • 修改FastMM4.pas以便实现LogCallStack将在界面中可见。或者您可以尝试直接从FastMM_FullDebugMode.dll

附带问题:尝试使用DetectClassInstance函数。