如何强制LeakCheck Delphi库不收集数据?

如何强制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} // <

我使用Delphi的LeakCheck库

我知道我可以使用如下构造禁用泄漏报告:

{$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这样的高级配置工具)。