27

检测内存泄漏的最佳工具是什么。

既免费又不免费。

谢谢

4

9 回答 9

40

FastMM 是一个免费的(可用源代码)内存泄漏检测器,已集成在最新的 Delphi 版本中。我从来不需要其他任何东西。

顺便说一句,在编码时限制内存泄漏的可能性要好得多,而不是在以后发现它们。一些技巧:

始终在代码中使用 try 和 finally 来释放创建的对象。最好立即编写此代码,然后编写代码以使用对象。更好地利用代码模板等 IDE 功能。

仅在绝对必要时使用返回动态分配对象的函数。通常将对象作为参数传递比创建并返回它们更好。例如这个

procedure getChoices(var AChoices: TStrings);

会比

function getChoices: TStrings;

因为没有意外泄漏创建的 TStrings 对象的可能性。

于 2009-01-06T10:50:29.707 回答
20

我们在 Delphi 7 中的工作中使用 EurekaLog。它是一个异常处理程序组件,它提供有关异常(包括调用堆栈!环境变量等)的非常详细的信息,即使是访问冲突也是如此。但是另一个很棒的功能是,您也可以告诉它在内存泄漏时出错,它显示了内存/对象首先分配的确切代码行!它是一种商业产品,但我仍然强烈推荐它。

于 2009-01-06T20:53:16.760 回答
14

AQTime非常好。它还执行其他操作,例如性能分析。它不需要对您的代码进行任何更改。当然,使用调试信息进行编译有助于提供更好的结果。

于 2009-01-06T11:04:12.347 回答
14

我会推荐完整的 FastMM4 版本,而不是 Delphi 中包含的版本。完整版为您提供了记录到文件而不是对话框的完整而详细的报告。将其与自制的“memoryleak-logfile-differ”结合起来,您就可以进行现有的 bughunt 了。

于 2009-01-06T13:06:26.327 回答
10

我总是使用 ReportMemoryLeaksOnShutdown := (DebugHook <> 0); 这样我只有在调试时才会报告泄漏。

ps想把它放在评论中,但我还没有权利..

于 2012-12-20T15:50:34.983 回答
7

您可能想看看这个 CodeRage 2 会议:为傻瓜而战的内存泄漏。它主要展示了如何使用 FastMM 来防止/检测 Delphi 中的内存泄漏。适用于 D2007,但仍适用于 D2009。

于 2009-01-06T20:46:26.820 回答
7

FastMM 非常好。我知道 Delphi 有 3 或 4 个免费的内存管理器。检查所有这些只需要不到一个小时,因为通常它们只需要 3 行代码就可以将它们嵌入到项目中。

于 2009-01-08T03:38:53.057 回答
4

我使用MadExcept是因为它可以免费供个人使用。

于 2010-08-25T15:08:17.067 回答
1

试试UMLD 1.0我们已经尝试过了!!用于 Delphi 开发的无泄漏 Delphi 应用程序开发和错误报告工具的智能解决方案。

http://www.torry.net/authorsmore.php?id=7616&sort=ID

于 2012-08-13T12:23:24.317 回答