Delphi 如何为TCriticalSection注册ExpectedMemoryLeak
这也许很简单。如何在D2007中向Indy9注册TCriticalSection的memleak? 我没有找到任何例子 编辑: 谢谢雷米的回复,但这对我不起作用。在Indy9目录中,我将IdComponent.pas从Delphi 如何为TCriticalSection注册ExpectedMemoryLeak,delphi,memory-leaks,delphi-2007,Delphi,Memory Leaks,Delphi 2007,这也许很简单。如何在D2007中向Indy9注册TCriticalSection的memleak? 我没有找到任何例子 编辑: 谢谢雷米的回复,但这对我不起作用。在Indy9目录中,我将IdComponent.pas从 initialization GStackCriticalSection := TCriticalSection.Create; finalization // Dont Free. If shutdown is from another Init section, it
initialization
GStackCriticalSection := TCriticalSection.Create;
finalization
// Dont Free. If shutdown is from another Init section, it can cause GPF when stack
// tries to access it. App will kill it off anyways, so just let it leak
// FreeAndNil(GStackCriticalSection);
到
和以前一样的泄漏。我可以在TCriticalSection.Create上设置一个断点,这样我就知道代码实际执行了。但奇怪的是,如果我在FastMM的RegisterExpectedMemoryLeak上设置断点,它永远不会到达。只需像任何其他参数一样,将
TCriticalSection
对象指针传递到RegisterExpectedMemoryLeak()
var
CS: TCriticalSection;
...
RegisterExpectedMemoryLeak(CS);
只需确保在注册之前已实例化了TCriticalSection
或者,您可以升级到Indy 10,它已经为您注册了有意泄漏(或者您可以在IdCompilerDefines.inc中定义FREE\u ON\u FINAL
,以禁用泄漏-执行此操作之前,请阅读IdStack.pas和IdThread.pas底部的注释)
var
CS: TCriticalSection;
...
RegisterExpectedMemoryLeak(CS);