ReportMemoryLeaksOnShutdown := true
の設定は、Delphi 10.2 Tokyoで作成したプログラム(WindowsとLinuxプログラムで試したもの)には何の効果もありません。明らかなメモリリークがあっても、何も報告されません。"ReportMemoryLeaksOnShutdown"がDelphi 10.2 Tokyoで動作していませんか?
誰かがこれを確認できますか?そして、Linuxプログラムでメモリリークをチェックする別の方法がありますか? WindowsではmadExceptを使うことができました。
------------------デルファイ10.2 ReportMemoryLeaksOnShutdown := true
で編集2 ------------------
コンソールアプリケーションとしてフラグが立てられていないプログラムでのみ動作するようです。 {$APPTYPE CONSOLE}
という行をコメントアウトすると、(私はWindows上でプログラムを実行すると)希望のエラーメッセージが表示されます。
------------------編集1 ------------------
ここには要求された例があります:
program WeakRefTest;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils;
type
TParent = class;
TChild = class
private
{$IFDEF AUTOREFCOUNT} [Weak] {$ENDIF}
Parent: TParent;
public
constructor Create (const Parent: TParent);
destructor Destroy; override;
end; { TChild }
TParent = class
private
Child : TChild;
public
constructor Create;
destructor Destroy; override;
end; { TParent }
constructor TChild.Create(const Parent: TParent);
begin
inherited Create;
WriteLn ('TChild.Create');
Self.Parent := Parent;
end;
destructor TChild.Destroy;
begin
WriteLn ('TChild.Destroy');
inherited;
end;
constructor TParent.Create;
begin
inherited;
WriteLn ('TParent.Create');
Child := TChild.Create (Self);
end;
destructor TParent.Destroy;
begin
WriteLn ('TParent.Destroy');
inherited;
end;
procedure SubRoutine;
var
Parent : TParent;
begin
Parent := TParent.Create;
WriteLn ('"SubRoutine" exit');
end; { SubRoutine }
begin { WeakRefTest }
ReportMemoryLeaksOnShutdown := true;
try
SubRoutine;
WriteLn ('"WeakRefTest" done');
except
on E: Exception do
WriteLn (E.ClassName, ': ', E.Message);
end;
end.
は、LinuxのアウトコメントTChild
の宣言で[Weak]
属性を持つライン上のメモリリークを強制します。 Windows用にコンパイルすると、ARCがサポートされていないのでメモリリークが発生します。私はコンパイルして10.2何も現れないのDelphiを使用して、Windows用実行すると
:私はコンパイルとDelphi XEを使用してコードを実行すると
メッセージは、メモリリークがあることが表示されます。 TChild
の宣言で[Weak]
属性をコメントアウトした後にLinuxコンパイラを使用した場合と同じです。
は、私はちょうど(WindowsのFMXプロジェクトに)テストし、それが正常に動作しエンバカデロ –
にバグレポートを提出してください。あなたは例を挙げることができますか? – Dsm
[mcve] –