【发布时间】:2018-04-03 12:23:27
【问题描述】:
我想在控制台应用程序中显示内存泄漏,但是在使用 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 我可以看到它们,但我不能。有解决办法吗?
【问题讨论】:
-
我不知道如何退出应用程序。它会自行退出,因为您没有可以让它继续运行的循环。 IOW,只要在创建 TStringList 时没有引发异常,如果 ExitProcess 调用被删除,它将在该行执行后立即退出控制台应用程序。您的整个应用程序可以精简为大约 6 或 8 行代码。
-
您在内存管理器显示任何内容之前退出进程,您期望什么?
-
如果您想提前退出,请使用“退出”或“暂停”。这不会干扰内存管理器释放/扫描/报告内存。
-
@SertacAkyuz 实际应用程序还有另一个读取命令的功能。所以如果我在那里退出它只会退出该功能。在控制台应用程序中,您可以编写不同的命令,这就是我使用 ExitProcess 的原因,因为我可以从函数中调用它,它会关闭应用程序本身。 Exit 只是退出当前函数。
标签: delphi memory-leaks console delphi-10.1-berlin