我正在开发一个软件,所以我刚刚开始在我的项目中使用 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/