0

我有一个空项目(它只包含一个表单)。如果我将此行添加到项目'USES GR32_Image;' 并运行应用程序,FastMM 在程序中显示泄漏。FastMM 设置为完全调试。我的程序中没有代码 - 除了 Delphi IDE 生成的代码和“使用 gr32”行。

报告毫无意义。这是完整的日志:http
://pastebin.com/Yhev3rJ2 这里是源代码: http: //pastebin.com/VjRrRiS8

我以前使用过 Graphics32 单元,从来没有遇到过问题。为什么我有这个泄漏以及为什么 FastMM 无法生成正确的报告?

4

3 回答 3

8

如果您使用完整版的 FastMM4,请启用 FullDebugMode。还打开详细的地图生成以帮助堆栈跟踪。检查该单元的单元初始化部分,看看是否有任何问题。

于 2011-01-07T16:52:08.467 回答
3

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

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

另请参阅这篇文章以获取更多提示。

编辑:

一个好的第一步是在你的 .TXT 文件上做这样的事情:

find "The allocation number is" < fastmmlog.txt | sort /R

在您的情况下,这将为您提供第一个分配编号281

从那里,您在 .TXT 中搜索分配号:

--------------------------------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

在这里你可以看到,NewRegistry你的泄漏涉及到。
从那里,您可以开始调试以找出泄漏的原因。

——杰伦

于 2011-01-07T22:14:41.617 回答
0

两个问题都解决了。

  1. 我记得前段时间我在 GR32.inc 中添加了这行代码: {$D-} 我删除了这行代码,重新编译了 VCL 并且它工作了。完全是我的错。

  2. 请参阅 Jeroen Pluimers 的帖子,该帖子回答了“为什么 FastMM 无法生成正确的报告?”这个问题。


感谢大家的参与。

于 2011-01-10T09:57:41.917 回答