Delphi 的探查器和内存分析工具 [关闭]

Posted

技术标签:

【中文标题】Delphi 的探查器和内存分析工具 [关闭]【英文标题】:Profiler and Memory Analysis Tools for Delphi [closed] 【发布时间】:2010-09-22 10:35:26 【问题描述】:

我最近从 Delphi 4 升级到 Delphi 2009。在使用 Delphi 4 时,我一直使用 GpProfile by Primoz Gabrijelcic 作为分析器,使用 Memory Sleuth by Turbo Power 进行内存分析和泄漏调试。两者都对我很有效。但我现在需要可以与 Delphi 2009 配合使用的新工具。

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

所以我的问题是:在您满意并推荐的当前版本的 Delphi 中,是否还有其他更便宜的选项来进行性能分析和内存分析,或者我应该硬着头皮为 AQTime 支付大笔费用?


附录:似乎早期的回答者表示,Delphi 中已经包含的 FastMM 管理器非常适合查找内存泄漏。

那么,对于源代码分析有什么好的替代方案吗?

我很好奇的是ProDelphi by Michael Adolph,它的成本不到 AQTime 的六分之一。你用它吗? AQTime 值得付出六倍的代价吗?


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

AQTime 一开始有点压倒性和混乱。花了几个小时才找到连接它所需的一些技巧。

ProDelphi 与我习惯的 GpProfile 非常相似。但它的窗口杂乱无章,不如 GpProfile 好。

对我来说,最大的不同似乎是:

    ProDelphi 更改您的代码。 AQTime 没有。如果出现问题,更改代码可能会损坏您的数据,但我对 GpProfile 的经验是它从未发生在我身上。 AQTime 加一。

    ProDelphi 要求您关闭优化。但是你想要分析的是你的程序优化,它将运行的方式。 AQTime 加一。

    ProDelphi 只能剖析到函数或过程。 AQTime 可以细分到单独的行。 AQTime 加 2。

    ProDelphi 有一个免费版本,可以分析 20 个例程,其专业版价格不到 100 美元。 AQTime 是 600 美元。用于 ProDelphi 的 Plus 4。

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


附录 3:Primoz Gabrijelcic 计划让 GpProfile 再次工作。在下面的一些回复中查看他的 cmets。他在 *** 上的身份为 Gabr。


附录 4:似乎毕竟有一个分析器解决方案。见Andre's open source asmprofiler, described below。

【问题讨论】:

对不起,我只有 AQTime 的经验。 你觉得值得吗? 你应该试试AQTime的限时demo。我在设置为 120 DPI 的笔记本电脑上遇到了很多问题——一些对话框实际上无法使用,因为按钮被切断了。这并没有激发太多的信心,支持者说他们对此无能为力...... :-( AQTime 在使用 Delphi XE2 Update 4 自动安装后给我带来了一些奇怪的问题。我必须卸载 AQTime 才能使用 Delphi 最简单的功能,例如“光标处的完整类”在我卸载 AQTime 之前无法使用。 这是免费软件且易于使用(与 ProDelphi 相比)。它还归结为行代码精度。但我怀疑这种情况下的结果是否准确。 delphitools.info/downloads/samplingprofiler-changelog 【参考方案1】:

就价格而言,作为内存跟踪器,您无法击败 FastMM4。它使用简单但功能强大,并且与 Delphi 完美集成。 我想你知道,无需下载、安装或更改任何其他内容,只需输入这一行

ReportMemoryLeaksOnShutDown := True;

在您的代码中的任何地方,都会启用内存泄漏的基本报告。 如果您需要更多类似崩溃信息,EurekaLog 是我们使用的一个非常好的产品。 MadExcept 也有不错的口碑……

对于具体的分析,我们有 AQTime。

至于 gpProfile,您可以尝试在 SO 上对gabr 进行错误更新...或者转到update gpProfile yourself as it is open source。 ;-)

【讨论】:

当前的公共资源已经过时了。我的磁盘上有很多更新的版本,但它仍然处于“正在进行的工作”状态,我没有足够的勇气来显示这些损坏的代码。我计划在 GpProfile 至少部分恢复工作后立即将其放在 Google 代码中。 你好,加布尔!不知道你还在,我看到你在 *** 上特别活跃。近 10 年来,我一直非常愉快地使用您的 GbProfile 和 Delphi 4。伟大的产品,并且在当时非常先进。我很高兴听到您对我在这里发布的问题的回答。 附注Gabr:您的 OmniThreadLibrary 看起来很有趣!我从来没有尝试过线程,因为它看起来总是那么复杂,但你的库似乎让它变得非常简单。 答案中有一个小的拼写错误。 “ReportMemoryLeakOnShutdown”应为“ReportMemoryLeaksOnShutdown”(至少在 D2010 中)。 要跟踪 FastMM 分配、虚拟内存图、转储或系统信息摘要,您可以查看FastMM Usage Tracker, (+1)【参考方案2】:

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

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

我这样做的主要原因是因为我错过了一个确切的调用树。 例如,ProDelphi 只存储所有调用的摘要和总计数, 您看不到在特定时间(或时间)调用特定程序的操作 期间)。 它有一个时间表,因此您可以看到通话时长如何随时间变化。

【讨论】:

感谢您的努力!我去看看! +1 它适用于多线程应用程序【参考方案3】:

也可以看看Eric Grange's Sampling Profiler

【讨论】:

采样分析器从来没有为我做过,但感谢我们的建议,因为它可能对某些人有用。 问题是,他们没有采样足够的信息。如果他们捕获了整个调用堆栈,他们可以告诉你哪些调用指令花费你最多。这样做比从大量样本中获得高精度更重要。 这是可用的最好的采样工具之一 @ Eric Grange 做得很好,继续努力【参考方案4】:

我对使用 AQtime 进行分析非常满意。

【讨论】:

如果您有 RAD XE 的 Enterprise 或 Architect 版本,AQTime 精简版现在包含在 Delphi 中。 它同时进行内存和时间分析【参考方案5】:

同时使用了 GpProfile 和 AQTime,我发现两者都可以有效地找出导致瓶颈的方法调用。

但是 AQTime 也可以告诉我是哪一行代码导致了这种情况,而无需对我的源代码进行任何更改(尽管它最适用于 TD32 调试和调试 dcus)。

我最近用它来加速一个例程大约 30 倍(由于内部库函数使用不当)

但是我不必自己付钱!

【讨论】:

30x 如果您可以获得指令级成本,这并不罕见。我手动完成,用暂停键暂停几次并记录调用堆栈。如果某个调用浪费了 30 个周期中的 29 个,那么您不需要 1000 个样本就可以看到它。【参考方案6】:

我们使用 AQTime Pro 并对它感到满意。 Smartbear 最近发布了一个完全免费的AQTime standard edition。大多数功能仍然存在,但它们当然有removed a bit

【讨论】:

此处链接的两个页面已被删除,现在重定向到 AQtime Pro。看起来标准版不再可用(并且不再与 RAD Studio 捆绑在一起)。以下是有关 RAD Studio 早期版本中包含的免费版本的页面:support.smartbear.com/more-info/aqtime/…【参考方案7】:

我同意您对 ProDelphi 界面的看法,但它做得足够好,我们很乐意继续使用它。当我们遇到严重的性能问题时,我们只需要偶尔进行分析,它总是可以帮助我们很快找到问题。物超所值,Michael 似乎很乐意为新版本保持更新。

我建议的一件事是,因为它确实需要插入代码,所以在某种 VCS 中包含所有相关代码是非常宝贵的。当我们需要分析时,我们:

检查所有相关文件 全部检查 然后进行我们需要的分析 取消所有结帐,有效地回滚到原来的位置。

【讨论】:

就我而言,VCS 是矫枉过正。我所做的是将我的整个工作目录复制到同一目录的“副本”。然后我回来是微不足道的。实际上,对于我可能做出的每一个重大改变,我都会这样做。【参考方案8】:

有没有人试过the Profiler component at Delphi Area? 它是免费软件,有源代码,上面写着:

如果您正在寻找一个简单且 测量执行时间的准确方法 您的代码是免费的,TProfiler 是 你需要什么。 TProfiler 是一个 非可视化和调试组件 这使您能够创建命名的 代码中的计时器。

TProfiler 的每个定时器都提供 以下信息:

计时器的次数 激活(命中数)总数 执行时间 平均执行时间 每次点击的时间 执行时间 第一次命中执行时间就 last hit 最少的命中 执行时间 最大命中 执行时间

【讨论】:

【参考方案9】:

这是真的,我想念 Primoz 的 GpProfile,并且没有找到一个好的替代品。我曾经尝试过 AQTime,但对它的价格不太满意。

用于跟踪内存泄漏和不可靠的内存访问,但是我对使用 FastMM4 感到非常满意。

【讨论】:

我保证我会更加努力地开发新版本!我也想念 GpProfile(幸运的是,我很快就会需要它……)【参考方案10】:

我已经使用 ProDelphi 很长时间了,发现它可以满足我的需求。

通过使用它提供的数据,我已经能够在系统性能改进方面取得惊人的成果。

对于小型项目,免费版本很好。

对于较大的项目,您需要(付费)专业版。

【讨论】:

【参考方案11】:

对于分析器,您可以试试 Gurock Software 的 SmartInspect。我从未使用过 GpProfile,但快速浏览它的功能集让我想起了 SmartInspect。有趣的是,它并没有声称自己是一个分析器,但它似乎和 GpProfile 一样多(除非我遗漏了一些东西)。它支持Delphi 2009,有免费试用版,比AQTime便宜一点。

注意:SmartInspect 是记录器而不是分析器。

【讨论】:

感谢您的建议。我以前没有听说过 SmartInspect。价格大约是AQTime的一半。 SmartInspect 是一个记录器。我看不出这可以与真正的分析器相比如何。你能解释一下吗?【参考方案12】:

FastMM4 内存管理器mentioned in this older answer ("如何监视或可视化 delphi 应用程序的内存碎片") 保留了所有可以在运行时查询的分配列表(并显示在网格使用包含的演示应用程序)。它并不能准确显示哪些对象泄漏,因为统计信息是按块大小计算的。但它对于长期监控生产中的应用程序(例如服务器或服务)很有用。我目前正在将它作为“VisualMM”插件集成到(商业)Web 应用程序服务器框架中。

【讨论】:

以上是关于Delphi 的探查器和内存分析工具 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在任务管理器和 ANTS 分析器中分析的内存使用情况

SQL 探查器和调优顾问

用delphi开发应用程序会不会有内存泄露的问题?

Grails 应用程序的探查器

.Net性能分析工具Profile

线程关闭期间Win64 Delphi RTL中的内存泄漏?