我正在开发一个软件,所以我刚刚开始在我的项目中使用 FastMM4(真正的)。

我在网上找到了关于如何在 FastMM4 中获取 line number 的信息,我得到了行号,但我可以弄清楚日志中的其他信息是什么意思?

我在日志文件中有这个

This block was allocated by thread 0x15F8, and the stack trace (return addresses) at     the time was:
402E86 [system.pas][System][System.@GetMem][2648]
403A3B [system.pas][System][System.TObject.NewInstance][8824]
403DAA [system.pas][System][System.@ClassCreate][9489]
403A70 [system.pas][System][System.TObject.Create][8839]
46A257 [u_home.pas][u_home][u_home.TForm1.SpeedButton1Click][80] {<-memory leak is here, but what are the Other detections?}
443AAC [Controls.pas][Controls][Controls.TControl.Click][5226]
46958B [Buttons.pas][Buttons][Buttons.TSpeedButton.Click][1211]
46956B [Buttons.pas][Buttons][Buttons.TSpeedButton.MouseUp][1204]
443FB2 [Controls.pas][Controls][Controls.TControl.DoMouseUp][5352]
441BA0 [Controls.pas][Controls][Controls.TControl.SetMouseCapture][4379]
444042 [Controls.pas][Controls][Controls.TControl.WMLButtonUp][5364]

The block is currently used for an object of class: TStringList

The allocation number is: 440

在这个 leak
   46A257 [u_home.pas][u_home][u_home.TForm1.SpeedButton1Click][80] {<-memory leak is here, but what are the Other detections?}

我的代码
 procedure TForm1.SpeedButton1Click(Sender: TObject);
  var
  str : TStringList;
  begin
  str := TStringList.Create;  {<--im not freeing the, so leak}

  end;

这是 call stack
我在网上搜索,但我不知道其他检测是什么...
402E86 [system.pas][System][System.@GetMem][2648]
403A3B [system.pas][System][System.TObject.NewInstance][8824]
403DAA [system.pas][System][System.@ClassCreate][9489]
403A70 [system.pas][System][System.TObject.Create][8839]

{Other then this}
46A257 [u_home.pas][u_home][u_home.TForm1.SpeedButton1Click][80] {<-memory leak is here, but what are the Other detections?}
{Other then this}

443AAC [Controls.pas][Controls][Controls.TControl.Click][5226]
46958B [Buttons.pas][Buttons][Buttons.TSpeedButton.Click][1211]
46956B [Buttons.pas][Buttons][Buttons.TSpeedButton.MouseUp][1204]
443FB2 [Controls.pas][Controls][Controls.TControl.DoMouseUp][5352]
441BA0 [Controls.pas][Controls][Controls.TControl.SetMouseCapture][4379]
444042 [Controls.pas][Controls][Controls.TControl.WMLButtonUp][5364]

我正在使用 delphi 2006
我也在 delphi 6, delph 7 中打开并尝试了相同的操作

检查
我发现这与 fastMM$ 检测和某些已经在 delphi 中的泄漏的注册有关。
How to track down tricky memory leak with fastMM?
这是用于注册泄漏但它们是错误吗?
Using FastMM4, how to register leaked string?

还有 FastMM4, Delphi6, Leak of TApplication?

are they just the steps leading to the memory leak?

最佳答案

你在日志中有什么是导致内存分配泄漏的调用堆栈。

您可以在问题的调用堆栈中看到它的用处。想象一下,你只有顶线,导致泄漏的调用

402E86 [system.pas][System][System.@GetMem][2648]

由于所有堆分配都经过 GetMem ,因此该信息本身几乎没有用。调用堆栈将您指向导致调用 GetMem 的事件。这就是查明导致泄漏的原因。

关于delphi - FastMM4,如何读取日志文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10071185/

10-15 05:27