最好的检测内存泄漏的工具是什么?
免费或者付费都可以。
谢谢。
最好的检测内存泄漏的工具是什么?
免费或者付费都可以。
谢谢。
FastMM是一个免费(源代码可用)的内存泄漏检测器,已经集成在最新的Delphi版本中。我从未需要其他东西。
编码时限制内存泄漏的可能性要比之后发现它们要好得多。以下是一些提示:
始终在代码中使用try和finally来释放创建的对象。最好立即编写此代码,然后编写使用对象的代码。更好的方法是利用IDE功能,例如代码模板。
仅在绝对必要时使用返回动态分配对象的函数。通常最好将对象作为参数传递而不是创建和返回它们。例如:
procedure getChoices(var AChoices: TStrings);
会比......好得多。
function getChoices: TStrings;
因为没有意外泄漏已创建的 TStrings 对象的潜在可能性。
AChoices
上不需要使用var
,因为它已经是一个引用类型。 - dan-gph我们在Delphi 7中使用EurekaLog。它是一个异常处理组件,可以提供非常详细的异常信息(包括调用堆栈!环境变量等),即使是访问冲突异常。但另一个很棒的功能是,你可以告诉它在内存泄漏时出错,这将显示分配内存/对象的确切代码行!它是一个商业产品,但我仍然强烈推荐使用。
AQTime非常好用。它还可以进行性能分析等其他操作。而且它不需要对您的代码进行任何更改。当然,使用调试信息编译可以获得更好的结果。
我建议使用完整的FastMM4版本而不是Delphi版本。完整版本将提供一个详细的报告记录到文件中,而不是对话框。结合自制的"内存泄漏日志文件差异"工具,你就可以准备好进行令人激动的错误追踪。
我总是使用ReportMemoryLeaksOnShutdown := (DebugHook <> 0);这样只有在我调试时才会报告内存泄漏。
PS:我想把这个放在评论里,但我还没有权限...
您可能想看一下这个CodeRage 2会议的内容:《菜鸟斗内存泄漏》。该会议主要展示了如何使用FastMM来预防/检测Delphi中的内存泄漏。虽然是针对D2007的,但对D2009仍然适用。
FastMM非常好用。我知道有3或4个免费的内存管理器适用于Delphi。通常只需要三行代码就可以将它们嵌入到项目中,因此检查它们不到一个小时就可以完成。
尝试使用UMLD 1.0,我们已经尝试并测试过了!这是一个智能解决方案,用于开发无泄漏的Delphi应用程序和报告Delphi开发工具中的错误。