Delphi FastMM突然在图形32中报告内存泄漏

Delphi FastMM突然在图形32中报告内存泄漏,delphi,fastmm,Delphi,Fastmm,我有一个空项目(它只包含一个表单)。如果我将此行添加到项目“USES GR32_Image;”然后运行应用程序,FastMM显示程序中的漏洞。FastMM设置为完全调试。我的程序中没有代码——除了DelphiIDE生成的代码和“uses gr32”行之外 这份报告毫无意义。 以下是完整日志: 以下是源代码: 我以前使用过Graphics32装置,从未出现过问题。为什么我有此漏洞以及为什么FastMM无法生成正确的报告?如果您使用的是完整版本的FastMM4,请启用FullDebugMode。还可

我有一个空项目(它只包含一个表单)。如果我将此行添加到项目“USES GR32_Image;”然后运行应用程序,FastMM显示程序中的漏洞。FastMM设置为完全调试。我的程序中没有代码——除了DelphiIDE生成的代码和“uses gr32”行之外

这份报告毫无意义。 以下是完整日志:
以下是源代码:


我以前使用过Graphics32装置,从未出现过问题。为什么我有此漏洞以及为什么FastMM无法生成正确的报告?

如果您使用的是完整版本的FastMM4,请启用FullDebugMode。还可以启用详细的贴图生成来帮助进行堆栈跟踪。检查该单元的单元初始化部分,查看是否存在任何问题。

使用完整的调试信息编译应用程序,然后在链接器选项中,确保调试信息位于.EXE和/或.MAP文件中

然后使用FullDebugMode运行FastMM,并在问题中复制/粘贴生成的.TXT文件

有关更多提示,请参见

编辑:

好的第一步是在.TXT文件上执行类似操作:

find "The allocation number is" < fastmmlog.txt | sort /R
在这里您可以看到,
NewRegistry
与您的泄漏有关。
从那里,您可以开始调试,找出它泄漏的原因

--杰罗恩

两个问题都解决了

  • 我记得不久前我在GR32.inc中添加了这行代码: {$D-} 我删除了线路,重新编译了VCL,它成功了。完全是我的错

  • 参见Jeroen Pluimers的帖子,该帖子回答了“为什么FastMM不能生成正确的报告?”



  • 感谢大家的参与。

    您能发布您的代码以便我们提供帮助吗。您应该能够在一个.dpr文件中组合一些内容,这将显示问题所在。为什么不在堆栈跟踪中获取函数名?我认为您需要正确配置FastMM。另外,我刚刚想到,这些内存泄漏可能是VCL预期的泄漏。@David:看起来FullDebugMode已打开,并且FastMM配置正确,但它没有映射文件来查找地址。如果他让链接器生成详细的映射文件,事情会变得更清楚。只需将您正在谈论的文件添加到项目中,不会导致内存泄漏。至少使用的不是最新版本,我下载并试用了它。你确定是Graphics32造成的吗?是的,TFunctionRegistry是Graphics32的一部分,但这可能只是意味着您的代码正在泄漏。GR32_映像中没有初始化部分。请按照梅森的建议执行,项目选项->链接器->地图文件详细信息(BDS2006)。@祭坛是gr32在dpr中使用fastmm之前或之后的使用?Hi Jeroen。我只是那样做了。请看原帖。我不得不从日志中删掉一大部分,因为帖子限制在30000个字符以内。把你的完整的.txt文件放到网上,让大家看看完整的东西。我粘贴了完整的日志和源代码。如果可能,请参阅原始帖子。答案已接受(它回答了“为什么FastMM无法生成正确的报告”的问题)。谢谢很高兴听到你被分类了,但是你可以把这个代表给别人而不是你自己!你只有评论,没有独立的答案。据我所知,我不能投票表决通过评论来解决这个问题。对不起,我知道,但我并不是说我应该得到这个代表。其他人也赚了,我知道你现在把它给了杰伦。另外,你的图片、大地址和意识问题是否满足了你的需求?
    --------------------------------2011/1/7 23:31:03--------------------------------
    A memory block has been leaked. The size is: 20
    
    This block was allocated by thread 0x1540, and the stack trace (return addresses) at the time was:
    402D80 [System][System][@GetMem]
    40388F [System][System][TObject.NewInstance]
    403C12 [System][System][@ClassCreate]
    4038C4 [System][System][TObject.Create]
    403C12 [System][System][@ClassCreate]
    403C6A [System][System][@AfterConstruction]
    457922 [GR32_Bindings][GR32_Bindings][NewRegistry]
    45807E [GR32_LowLevel][GR32_LowLevel][RegisterBindings]
    458152 [GR32_LowLevel][GR32_LowLevel][GR32_LowLevel]
    404373 [System][System][InitUnits]
    4043DB [System][System][@StartExe]
    
    The block is currently used for an object of class: TList
    
    The allocation number is: 281