Delphi的分析器和内存分析工具

54

我最近从Delphi 4升级到了Delphi 2009。在Delphi 4中,我使用Primoz Gabrijelcic的GpProfile作为分析器,使用Turbo Power的Memory Sleuth进行内存分析和泄漏调试。两者都对我很有用。但现在我需要新的工具来适应Delphi 2009。

显然,AutomatedQA的AQTime是Delphi中领先的分析/分析工具。他们最近甚至收购了Atanas Soyanov的Memproof,我了解到这是一个出色且免费的内存分析工具,并将其功能合并到AQTime中。但对于个人程序员来说,AQTime非常昂贵。它实际上比升级到Delphi 2009的成本还要高!

因此,我的问题是:是否有其他价格更便宜的选项可以在当前版本的Delphi中进行分析和内存分析,您是否满意并推荐,或者我应该咬紧牙关支付AQTime的巨额费用?


补充:看起来早期回答者指出,Delphi 中已经包含的 FastMM 管理器非常适合查找内存泄漏。

那么,有没有好的源代码分析工具?我很想了解 Michael Adolph 的 ProDelphi,它的成本不到 AQTime 的六分之一。您使用过吗?AQTime 是否值得支付六倍的费用?


附录2:我下载了 AQTime 和 ProDelphi 的试用版本。

AQTime 一开始有点让人不知所措和困惑。需要几个小时才能找到一些必要的技巧来连接它。

ProDelphi 非常像我之前使用的 GpProfile。但是它的窗口杂乱无章,令人困惑,而且不如 GpProfile 美观。

对我来说,主要差异似乎是:

  1. ProDelphi 会更改你的代码,而 AQTime 不会。如果出现问题,更改代码可能会损坏数据,但我的经验是 GpProfile 从未发生过这种情况。AQTime 得分加1。

  2. ProDelphi 要求关闭优化。但是,您希望优化后运行程序进行分析。AQTime 得分加1。

  3. ProDelphi 只能对函数或过程进行分析。AQTime 可以分析到每行代码。AQTime 得分加2。

  4. ProDelphi 有一个免费版本,可以对20个例程进行分析,其专业版的价格低于100美元。AQTime 的价格为600美元。ProDelphi 得分加4。

现在得分是4-4。你怎么看?


补充3:Primoz Gabrijelcic计划使GpProfile再次可用。请参阅他在以下一些回复中的评论。他在StackOverflow上使用Gabr


补充4:看起来可能确实有一个分析器解决方案。请参见下面描述的Andre开源asmprofiler


对不起,我只有使用AQTime的经验。 - Toon Krijthe
你觉得这值得花费吗? - lkessler
2
你应该试试 AQTime 的限时演示版。我在我的笔记本电脑上遇到了很多问题,因为它的 DPI 设置为 120,一些对话框实际上无法使用,因为按钮被切断了。这让我没有太多信心,而且支持人员说他们无法解决这个问题... :-( - mghie
1
AQTime在我安装Delphi XE2更新4时自动安装后导致了一些奇怪的问题。我不得不卸载AQTime才能使用Delphi最简单的功能,例如“光标处完成类别”在我卸载AQTime之前无法正常工作。 - Jerry Dodge
这是免费软件,易于使用(与ProDelphi相比)。它还可以达到行代码精度。但我怀疑在这种情况下结果是否准确。 delphitools.info/downloads/samplingprofiler-changelog - Gabriel
12个回答

35

对于价格而言,FastMM4作为内存跟踪器是无可匹敌的。它易于使用,功能强大,并且与Delphi完美集成。
我想你知道,只需添加这一行代码,无需下载、安装或更改任何其他内容。

ReportMemoryLeaksOnShutDown := True;

在您的代码中任何位置,都可以启用基本的内存泄漏报告。
如果您需要更多的崩溃信息,我们使用的很好的产品是EurekaLog。MadExcept也有良好的声誉...
对于专门的分析,我们有AQTime。
至于gpProfile,您可以尝试并向SO上的gabr寻求更新...或者自己更新gpProfile,因为它是开源的。;-)

3
目前的公共资源非常过时。我在我的硬盘上有更新得多的版本,但它仍然处于“正在进行中”的状态,我不够勇敢展示这样糟糕的代码。我计划一旦GpProfile能恢复至少部分功能,就会将其放在Google Code上。 - gabr
1
Gabr先生:您的OmniThreadLibrary看起来非常有趣!我以前从未尝试过线程,因为它总是看起来很复杂,但是您的库似乎让它变得非常简单。 - lkessler
2
答案中有一个小的拼写错误。"ReportMemoryLeakOnShutdown" 应该改为 "ReportMemoryLeaksOnShutdown"(至少在D2010版本中)。 - conciliator
gpProfiler的源代码在该链接上不再可用。 - none
4
要跟踪FastMM分配、虚拟内存图、转储或系统信息摘要,您可以查看FastMM Usage Tracker - TLama
显示剩余2条评论

33

我为Delphi制作了一个开源分析器: http://code.google.com/p/asmprofiler/

它并不完美,但是它是免费且开源的 :-).

我制作它的主要原因是因为我错过了一个精确的调用树。 例如,ProDelphi只存储所有调用的摘要和总计数, 您无法看到特定时间内特定过程的调用情况(或时间持续时间)。 它还有一个时间图表,因此您可以看到调用持续时间随时间的变化。


谢谢你的努力!我会检查一下! - Edwin Yip
3
+1并且它可以与多线程应用程序一起使用。 - mjn

24

2
采样分析器对我来说从未起到过作用,但感谢您的建议,它可能对某些人有用。 - lkessler
1
问题在于,它们没有采样足够的信息。如果它们捕获整个调用堆栈,就可以告诉您哪些调用指令耗费了最多的时间。这比从大量样本中获得高精度更为重要。 - Mike Dunlavey
2
这是最好的抽样工具之一 @ Eric Grange 做得很好,继续保持。 - VibeeshanRC

8

我一直非常喜欢使用AQtime进行性能分析。


1
如果您使用的是RAD XE的企业版或架构师版,那么AQTime Lite版本现在已经包含在Delphi中了。 - Warren P
它可以同时进行内存和时间分析。 - Lars Truijens

4

我曾使用过GpProfile和AQTime,发现两者都能有效地找到造成瓶颈的方法调用。

然而,AQTime还可以告诉我是哪一行代码导致了这个问题,而不需要对我的源代码进行任何更改(虽然它最好与TD32调试和debug dcus一起使用)。

最近,我使用它将一个例程的速度提高了约30倍(由于错误使用内部库函数)。

然而,我并没有自己支付费用!


1
如果您可以获得指令级别的成本,那么30倍并不罕见。我通过手动方式实现,使用暂停键暂停几次并记录调用堆栈。如果某个调用浪费了30个周期中的29个,您不需要1000个样本来看到它。 - Mike Dunlavey

3
我们使用AQTime Pro并且对其感到满意。Smartbear最近发布了一个完全免费的AQTime标准版。大部分功能仍然存在,但他们当然删减了一些

1
这里链接的两个页面已经被移除,现在重定向到 AQtime Pro。看起来标准版不再可用(也不再与 RAD Studio 捆绑)。这里有一个关于早期版本的 RAD Studio 中包含的免费版的页面:https://support.smartbear.com/more-info/aqtime/standard-for-rad-studio-vs-pro/。 - John B. Lambe

2
有人尝试过在Delphi Area上的Profiler组件吗?它是带源代码的免费软件,描述如下:
“如果你想要一个简单而准确的免费方法来测量你的代码执行时间,那么TProfiler就是你需要的。TProfiler是一个非可视化和调试组件,它使你能够在你的代码中创建命名计时器。”
“TProfiler的每个计时器提供以下信息:计时器被激活的次数(次数);总执行时间;每次命中的平均执行时间;第一次命中的执行时间;最后一次命中的执行时间;执行时间最短的命中;执行时间最长的命中。”

2

我同意您对ProDelphi界面的看法,但它做得已经足够好,我们很乐意继续使用它。我们只需要在出现重大性能问题时偶尔进行分析,而且它总是能够帮助我们快速找到问题。物有所值,Michael似乎也很擅长为新版本更新。

我建议的一件事情是,由于它确实需要插入代码,因此将所有相关代码放在某种VCS中是非常宝贵的。当我们需要进行分析时,我们会:

  • 检查所有相关文件
  • 将它们全部签出
  • 进行所需的分析,然后
  • 取消所有签出,有效地回滚到原来的状态。

在我的情况下,使用版本控制系统有些过头了。我所做的是将整个工作目录复制到同一目录的“副本”中。然后对我来说,回溯变得非常简单。实际上,我会为我可能进行的每个重大更改都这样做。 - lkessler

1

我已经长时间使用ProDelphi,并且发现它能够满足我的需求。

通过使用它提供的数据,我能够实现系统性能改进的惊人结果。

对于小型项目,免费版本就可以满足需求。

对于大型项目,你需要购买专业版本(付费版)。


1

确实,对于性能分析,我很想念Primoz的GpProfile,并且没有找到一个好的替代品。我曾经尝试过AQTime,但是对于它的价格并不太满意。

然而,对于内存泄漏和不良内存访问的跟踪,我使用FastMM4非常满意。


1
我保证我会更加努力地工作,发布新版本!我也很想念GpProfile(幸运的是,看起来我很快就需要它了...) - gabr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接