在 Delphi 11 64 位应用程序中使用 TIdHttpServer 和MadExcept时,每次我关闭应用程序时,将 MadExcept 设置为报告“资源泄漏”,我都会得到两个泄漏,分别是 IdThreadSafe.pas 中的 TIdCriticalSection 和 SyncObjs.pas 中的 TCriticalSection。
这具有“错误标志”泄漏的所有特征——即 MadExcept 报告的泄漏实际上并不存在。但我必须确定。
使用旧的“ReportMemoryLeaksOnShutdown := True”不会报告这 2 个泄漏...
是的,它们是实际的泄漏,是的,这是故意的行为。IdThread.pas
请参阅印地和IdStack.pas
单位底部的评论。
话虽如此,它们是已注册的泄漏,因此它们不应出现在泄漏报告中。在德尔福 2006+。System.RegisterExpectedMemoryLeak()
被使用,因此如果 MadExcept 正确连接到 RTL(即提供TMemoryManagerEx.RegisterExpectedMemoryLeak
回调),它应该自动获取注册。
否则,对于早期版本,您可以使用定义的USE_MADEXCEPT
(或USE_FASTMM4
,或USE_LEAKCHECK
)重新编译 IndyIdCompilerDefines.inc
以启用泄漏注册。
否则,您可以使用FREE_ON_FINAL
定义的 in重新编译 IndyIdCompilerDefines.inc
以堵住漏洞。