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