在控制台应用程序中调用 ExitProcess(0) 不会显示内存泄漏

Calling ExitProcess(0) in console app doesn't show memory leaks

我想在控制台应用程序中显示内存泄漏,但是在使用 ExitProcess(0) 时它不会显示它们,没有它我不知道如何退出该应用程序。

这是创建内存泄漏但未显示的代码示例:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  sysutils, classes, windows;

function Test: Boolean;
var
   test : TStringList;
begin
  test := TStringList.Create;
  ExitProcess(0);
end;

begin
  try
    ReportMemoryLeaksOnShutdown := true;
    Test;
  except
    on E: Exception do
    begin
      Writeln(E.ClassName, ': ', E.Message);
      REadln;
    end;
  end;
end.

为了查看内存泄漏,我从 cmd 执行了 exe。现在,如果我发表评论 ExitProcess,我可以看到它们,但打开它我就看不到了。有解决办法吗?

ExitProcess 退出调用进程。就流程而言,功能甚至没有return。因此内存管理器找不到扫描和报告内存泄漏的机会。

您必须使用其他方式退出您的应用程序。您可以使用 Halt,或在函数中引发异常,或 return 函数中的某些内容,告诉主程序它将退出。