检测内存泄漏的最佳工具是什么。
既免费又不免费。
谢谢
FastMM 是一个免费的(可用源代码)内存泄漏检测器,已集成在最新的 Delphi 版本中。我从来不需要其他任何东西。
顺便说一句,在编码时限制内存泄漏的可能性要好得多,而不是在以后发现它们。一些技巧:
始终在代码中使用 try 和 finally 来释放创建的对象。最好立即编写此代码,然后编写代码以使用对象。更好地利用代码模板等 IDE 功能。
仅在绝对必要时使用返回动态分配对象的函数。通常将对象作为参数传递比创建并返回它们更好。例如这个
procedure getChoices(var AChoices: TStrings);
会比
function getChoices: TStrings;
因为没有意外泄漏创建的 TStrings 对象的可能性。
我们在 Delphi 7 中的工作中使用 EurekaLog。它是一个异常处理程序组件,它提供有关异常(包括调用堆栈!环境变量等)的非常详细的信息,即使是访问冲突也是如此。但是另一个很棒的功能是,您也可以告诉它在内存泄漏时出错,它显示了内存/对象首先分配的确切代码行!它是一种商业产品,但我仍然强烈推荐它。
AQTime非常好。它还执行其他操作,例如性能分析。它不需要对您的代码进行任何更改。当然,使用调试信息进行编译有助于提供更好的结果。
我会推荐完整的 FastMM4 版本,而不是 Delphi 中包含的版本。完整版为您提供了记录到文件而不是对话框的完整而详细的报告。将其与自制的“memoryleak-logfile-differ”结合起来,您就可以进行现有的 bughunt 了。
我总是使用 ReportMemoryLeaksOnShutdown := (DebugHook <> 0); 这样我只有在调试时才会报告泄漏。
ps想把它放在评论中,但我还没有权利..
您可能想看看这个 CodeRage 2 会议:为傻瓜而战的内存泄漏。它主要展示了如何使用 FastMM 来防止/检测 Delphi 中的内存泄漏。适用于 D2007,但仍适用于 D2009。
FastMM 非常好。我知道 Delphi 有 3 或 4 个免费的内存管理器。检查所有这些只需要不到一个小时,因为通常它们只需要 3 行代码就可以将它们嵌入到项目中。
我使用MadExcept是因为它可以免费供个人使用。
试试UMLD 1.0我们已经尝试过了!!用于 Delphi 开发的无泄漏 Delphi 应用程序开发和错误报告工具的智能解决方案。