1

我使用 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 模式下编译时不收集任何数据。

我可以像这样轻松地“破解” LeakCheck.pas 初始化/完成部分:

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

有没有更好的办法?我错过了条件定义还是全局属性?

4

1 回答 1

7

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

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

正如评论中所指出的,LeakCheck 必须是 .dpruses子句中列出的第一个单元,这可能会导致 IDE 偶尔出现问题;它有时会由于{$IFDEF}. 我通常不认为这是一个大问题,因为一旦它发生并且你已经看到原因是什么,就很容易回去修复它。

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

于 2015-03-27T20:35:32.293 回答