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

时间:2018-04-03 12:23:28

标签: delphi memory-leaks console delphi-10.1-berlin

我想在控制台应用程序中显示内存泄漏但是在使用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我可以看到它们但是我不能。有没有修复?

1 个答案:

答案 0 :(得分:0)

class PurchaseOrderApprover(BaseModel): purchase_order = models.ForeignKey(PurchaseOrder, related_name='purchase_order_approvers', on_delete=models.CASCADE) approver = models.ForeignKey(User, on_delete=models.PROTECT) is_approved = models.BooleanField(default=False) 退出调用进程。就过程而言,功能甚至不返回。因此,内存管理器无法找到扫描和报告内存泄漏的机会。

您必须使用其他方式退出应用程序。你可以使用ExitProcess,或者在函数中引发一个异常,或者从函数中返回一些东西,告诉主程序它会退出。