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

How to force LeakCheck Delphi library to not collect data?

我使用 Delphi 的 LeakCheck 库 https://bitbucket.org/shadow_cs/delphi-leakcheck

我知道我可以使用这样的构造来禁用泄漏报告:

{$IFDEF DEBUG}
System.ReportMemoryLeaksOnShutdown := true; // this will enable LeakCheck to display a message on Windows
{$ELSE}
System.ReportMemoryLeaksOnShutdown := false;
{$ENDIF}

但我还需要库在以 RELEASE 模式编译时不收集任何数据。

我可以轻松地 "hack" LeakCheck.pas initialization/finalization 部分,如下所示:

...
{$IFDEF DEBUG} // <--- Code added by me
initialization
  TLeakCheck.Initialize;
finalization
  TLeakCheck.Finalize;
{$ENDIF} // <--- Code added by me
end.

有没有更好的办法?我想念的条件定义或全局 属性?

我不使用您提到的特定库 (LeakCheck),但我通常通过仅在定义了正确的配置时包含该单元(在本例中为 DEBUG)来执行此操作。这意味着在发布时它甚至不包含在可执行文件中。

uses
  ...,
  {$IFDEF Debug}
  LeakCheck,
  {$ENDIF}
  ...;

正如评论中指出的那样,LeakCheck 必须是 .dpr 的 uses 子句中列出的第一个单元,这可能会导致 IDE 偶尔出现问题;它有时会因 {$IFDEF} 而中断。我通常不认为这是一个主要问题,因为一旦它发生并且您已经知道原因是什么,就很容易返回并修复它。

如果这成为一个太大的问题,还有另一种解决方法 - 创建一个只使用 LeakCheckSysUtils 的新单元,并将上面的 {$IFDEF} 添加到那个单位。然后,您首先将新单位包含在您的 .dpr 中。因为它的唯一任务实际上是 use LeakCheck,它仍然在需要时将 LeakCheck 放入 .dpr 中的第一个编译顺序,并且在不需要时根本不包含它。