如何强制LeakCheck Delphi库不收集数据?
我使用Delphi的LeakCheck库 我知道我可以使用如下构造禁用泄漏报告:如何强制LeakCheck Delphi库不收集数据?,delphi,leakcheck,Delphi,Leakcheck,我使用Delphi的LeakCheck库 我知道我可以使用如下构造禁用泄漏报告: {$IFDEF DEBUG} System.ReportMemoryLeaksOnShutdown := true; // this will enable LeakCheck to display a message on Windows {$ELSE} System.ReportMemoryLeaksOnShutdown := false; {$ENDIF} ... {$IFDEF DEBUG} // <
{$IFDEF DEBUG}
System.ReportMemoryLeaksOnShutdown := true; // this will enable LeakCheck to display a message on Windows
{$ELSE}
System.ReportMemoryLeaksOnShutdown := false;
{$ENDIF}
...
{$IFDEF DEBUG} // <--- Code added by me
initialization
TLeakCheck.Initialize;
finalization
TLeakCheck.Finalize;
{$ENDIF} // <--- Code added by me
end.
但我也需要库在发布模式下编译时不收集任何数据
我可以轻松地“破解”LeakCheck.pas初始化/终结部分,如下所示:
{$IFDEF DEBUG}
System.ReportMemoryLeaksOnShutdown := true; // this will enable LeakCheck to display a message on Windows
{$ELSE}
System.ReportMemoryLeaksOnShutdown := false;
{$ENDIF}
...
{$IFDEF DEBUG} // <--- Code added by me
initialization
TLeakCheck.Initialize;
finalization
TLeakCheck.Finalize;
{$ENDIF} // <--- Code added by me
end.
。。。
{$IFDEF DEBUG}/我不使用您提到的特定库(LeakCheck),但我通常只在定义了正确的配置时(在本例中,DEBUG
)才包括该单元。这意味着在发行版中,它甚至不包括在可执行文件中
uses
...,
{$IFDEF Debug}
LeakCheck,
{$ENDIF}
...;
正如在评论中指出的,泄漏检查必须是.dpr的uses
子句中列出的第一个单元,这可能会导致IDE偶尔出现问题;它有时会因为{$IFDEF}
而中断。我通常不认为这是一个大问题,因为一旦它发生了,你已经看到了原因是什么,就很容易回去解决它
如果这成为一个太大的问题,还有另一个解决方法-创建一个新单元,它只使用LeakCheck
和SysUtils
,并在该单元中添加上述{$IFDEF}
。然后将新单元首先包含在.dpr中。由于它的唯一任务实际上是使用LeakCheck,因此在需要时,它仍然将LeakCheck置于.dpr中的第一个编译顺序中,而在不包括它时,它根本不包括它。我不使用您提到的特定库(LeakCheck),但我通常只在定义了正确的配置时才包括单元(在本例中,DEBUG
)。这意味着在发行版中,它甚至不包括在可执行文件中
uses
...,
{$IFDEF Debug}
LeakCheck,
{$ENDIF}
...;
正如在评论中指出的那样,LeakCheck必须是.dpr的uses
子句中列出的第一个单元,这可能会导致IDE偶尔出现问题;它有时会因为{$IFDEF}而中断
。我通常不认为这是一个主要问题,因为一旦它发生了,并且您已经了解了原因,就可以很容易地返回并修复它
如果这成为一个太大的问题,还有另一个解决方法-创建一个新的单元,它只使用泄漏检查和SysUtils
,并添加上面的{$IFDEF}
在该单元中。然后将新单元首先包含在.dpr中。因为它的唯一任务实际上是使用LeakCheck
,所以它仍然在需要时将LeakCheck
放在.dpr的第一个编译顺序中,而在不需要时根本不包含它。LeakCheck是特殊的(FastMM和MadCheck的方式)。它必须是.dpr项目文件中的第一个单元。处理{$IFDEF}时,.dpr文件中的uses部分总是很麻烦。IDE往往会覆盖{$IFDEF}子句并不时地破坏项目。@GadDLord:当然,有时。除了手动添加/删除uses子句或实质性地修改泄漏检查单元本身之外,这可能是唯一的解决方案。当IDE破坏它时,总是很容易修复的。您可以使用单元别名来避免条件,从而破坏ideLeakCheck在DPR中使用IFDEF
是我通常禁用/启用它的方式,设计为易于插入到项目中。但是您也可以使用LEAKCHECK\u disable
条件,请查看LEAKCHECK.Configuration.inc
这是隐藏所有用户配置以及关于每个选项的注释的地方(我没有像FastMM这样奇特的配置工具)。LeakCheck很特别(就像FastMM和MadCheck一样)。它必须是.dpr项目文件中的第一个单元。在使用{$IFDEF}时,弄乱.dpr文件中的uses部分总是很麻烦。IDE往往会覆盖你的{$IFDEF}子句并不时地破坏项目。@GadDLord:当然,有时。除了手动添加/删除uses子句或实质性地修改泄漏检查单元本身之外,这可能是唯一的解决方案。当IDE破坏它时,总是很容易修复的。您可以使用单元别名来避免条件,从而破坏ideLeakCheck在DPR中使用IFDEF
是我通常禁用/启用它的方式,设计为易于插入到项目中。但是您也可以使用LEAKCHECK\u disable
条件,请查看LEAKCHECK.Configuration.inc
这是隐藏所有用户配置以及关于每个选项的注释的地方(我没有像FastMM这样的高级配置工具)。