我使用过FastMM,它是检测泄漏和内存问题的绝佳工具。 但是现在我尝试检查用Delphi制作的COM服务器,并且报告不一致。 我试图在ShearMM和其他人的DLL中配置FastMM,但我知道不应该这样(COM服务器必须是与使用它的二进制文件隔离的黑盒子,不是要共享MM) 。 那么......我该如何配置呢? 我应该在服务器项目中启用什么定义,以便FastMM报告COM服务器上的泄漏?
EDITED
我添加了一个delphi项目作为示例。它包含一个带有泄漏的COM进程内对象和一个消耗它的EXE项目,也有泄漏。执行客户端时,只有FastMM4显示客户端泄漏的报告。未检测到(或未报告)服务器泄漏:
好奇心:在服务器中,如果不使用FastMM,我使用Delphi泄漏报告(ReportMemoryLeaksOnShutdown),Delphi发现服务器泄漏!
另一个澄清:我的FastMM4Options.inc未受影响,因为它来自FastMM4来源
答案 0 :(得分:0)
如果将COM对象配置为在进程外服务器进程中运行,以便创建COM对象启动EXE文件,则可以自由使用FastMM,与您描述的调用进程隔离
如果COM以这种方式启动EXE文件,默认情况下它将在释放最后一个对象时终止,除非您使用ComServer.OnLastRelease
事件覆盖此行为(ComServer在{{1中声明) }} unit。。