在控制台应用程序中调用 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 函数中的某些内容,告诉主程序它将退出。
我想在控制台应用程序中显示内存泄漏,但是在使用 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 函数中的某些内容,告诉主程序它将退出。