如何找到内存泄漏的根本原因?

gwo2fgha  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(295)

有时,当我关闭我的应用程序时,我会出现以下错误:

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:

21 - 28 bytes: TGradientPoints x 2, TGradientPoint x 4, Unknown x 2
29 - 36 bytes: TD2DBitmapHandle x 1, TGradient x 2, TBitmapImage x 3, TBrushBitmap x 2
37 - 44 bytes: TFont x 1, TList<System.Classes.TCollectionItem> x 2, TBrushResource x 2, TPosition x 12
45 - 52 bytes: TBitmap x 3, TObjectList<FMX.Graphics.TCanvasSaveState> x 1, UnicodeString x 1
53 - 60 bytes: TBrush x 1
61 - 68 bytes: Unknown x 1
69 - 76 bytes: TTransform x 2
77 - 84 bytes: TStrokeBrush x 1
237 - 252 bytes: TCanvasD2D x 1

---------------------------
OK   
---------------------------

问题是我找不到这些内存泄漏是从哪里来的,而且由于这个异常很少引发,所以很难进行调试。:(

他们有什么好方法来找出内存泄漏的根本原因吗?

v64noz0r

v64noz0r1#

该选项是使用FASTMM5,而不是Delphi中包含的默认FastMM4。

借助FastMM5,我们可以做到:

if FastMM_LoadDebugSupportLibrary then
begin
  FastMM_EnterDebugMode;
  FastMM_MessageBoxEvents := FastMM_MessageBoxEvents + [mmetUnexpectedMemoryLeakDetail];
end;

然后在关闭时,我们有每个内存泄漏的准确堆栈跟踪。

相关问题