在Windows平台上,有哪些适用于本地C++的好的性能分析工具?

17

我正在寻找一款适用于原生C ++的性能分析器。它肯定不必是免费的,但成本会影响购买决策。这是商业工作,因此我不能使用个人或学术许可证副本。

我正在寻找的关键功能包括:

  • 进程级度量
  • 组件级度量
  • 行级度量
  • 支持多线程代码
  • 易用性
  • 成本
  • 需要Visual Studio 2005 Professional的支持(高度希望VS 2008 Professional支持)

我使用过Intel的VTune和Compuware的Devpartner Performance Analysis Community Edition。

VTune看起来很强大,但它有一个陡峭的学习曲线。它也非常“模块化”,因此您必须弄清楚您需要购买哪些部分。

DevPartner PACE很容易使用并提供所有关键功能,但只有45天的试用期。许可版本(DevPartner for Visual C ++ BoundsChecker Suite)约为每个座位1400美元,这是可以做到的,但在我看来有点高。

有哪些适用于原生C ++的好的性能分析器以及为什么


另请参阅:

C ++最喜欢的性能分析工具是什么


1
叹气:我搜索了几分钟的C++和性能分析器,但是没有结果,因为它们使用了性能分析而不是使用性能分析器标签。 - Zach Burlingame
1
很遗憾,这个问题并不是一个精确的副本。他们没有说明他们对分析器的要求。随后的讨论缺乏详细的原因解释。我认为,基于某些标准寻求工具推荐比寻求“最喜欢”的工具更容易得到可答复的答案。 - Zach Burlingame
@Burly:你的观点很有道理——你写了一个好的、专注的问题,而答案可能并不一定适用于其他问题。我会重新开放。 - Shog9
将近8年过去了,Visual Studio如何适应现在的环境?自从VS 2012以来,我一直在使用内置的分析器,并且随着每个版本的发布,它变得越来越好。如果有的话,今天在这个领域(商业)竞争对手的优势是什么? - IInspectable
8个回答

9
在Windows上,GlowCode 是价格实惠、相对容易使用的,并提供免费试用版,让您可以看看它是否适合您。

3
许多人并不知道,微软正在取得巨大进展,将最好的性能改进工具免费提供给开发者使用 :-). 他们向我们所有人公开了Windows跟踪(ETW)的内部情况。

性能工具

它是新的Windows SDK for server 2008和Vista的一部分。令人印象深刻,如果您的目标是在Windows下进行性能分析和分析(无论使用哪种语言),则必须下载。

在您决定下载之前,请在此处查看文档:

MSDN文档


7
如果我没记错的话,perftool更多是一个系统性能监视器(CPU与磁盘/网络负载),而不是一个函数级别的代码分析器? - Martin Beckett
这缺乏对本地应用程序实际性能调优的忠实度 :( - kfsone
它似乎还会生成如此巨大的转储,以至于您无法合理地分析运行时间较长的任何内容。我也使用了UIforETW(由Chrome团队开发)。如果您只查看基本值,则可以,但是如果您需要深入了解,30秒很快就会累积到12GB的数据。 - kfsone

3

2
我在SourceForge上找到了Luke StackWalker(http://lukestackwalker.sourceforge.net/)。不幸的是,它没有“关注子树”的功能,但它仍然很方便使用,使用符号服务器(如果您还没有设置建议立即设置),提供图形可视化等。 缺点是它不显示子函数的累计时间(样本)。
另一个选择是“Very Sleepy”(http://www.codersnotes.com/sleepy)。它可以显示孩子们的累积时间,但不幸的是它不使用符号服务器。

最新版本的Very Sleepy可以使用符号服务器。 - Vladimir Panteleev
@CyberShadow,你说得对。版本0.82真的很好。不仅在使用符号服务器方面,还在于“聚焦子树”功能。 - Patrick
1
如果你认为0.82已经很不错了,那么等你看到我的分支(正在进行中);) - Vladimir Panteleev
迫不及待地想要尝试一下。谢谢。 - Patrick

2

CodeXL也值得一看,它可以在Linux和Windows上运行,虽然它主要专用于OpenGL / OpenCL调试和分析,但在分析部分下有一个基于时间的CPU样本选项,可能会很有帮助。它也是免费的,并且只要pdb文件可用(在Windows上),它就能正常工作(即使对于使用pdb进行发布构建的情况)。


+1:在免费工具中,它是唯一能够为我使用Visual Studio Community 2017(C ++,STL,OpenCV)的Release配置构建的二进制文件提供任何有意义结果的工具。 - AntonK

1
绝对是Visual Studio Team System。迄今为止最好的选择。

1
我编写了一个开源的轻量级win32/64分析器,支持CPU和内存分析,与VS分析器有些相似,但具有独特的功能,如CPU和内存数据的火焰图。它在这里:dprofiler

1
我没有给你点踩 - 我不喜欢这样做。但在我看来,整个 profiling 的概念基于程序员社区的自我欺骗,并需要修订。请查看此答案。 - Mike Dunlavey
Mike,我不确定你是否检查了代码,这个分析器不能像gprof(CPU分析器)那样工作,它会对所有线程进行采样,并计算IP的权重,以调用树等形式进行分组,无需重新编译代码。 - xwlan
Mike,我的帖子可能会让你感到困惑,因为我说“类似于VS分析器”,但我需要澄清的是,它的用户界面、计数器等与VS分析器相似,但它们的工作方式不同。VS分析器(在VS2012之前)仅采样IP。dprofiler通过收集所有线程的堆栈跟踪来采样,因此dprofiler可以将堆栈帧分组成调用树。 - xwlan
1
Q1:是的。采样器定期对目标线程进行采样。在<History>视图中,每个采样都有一个关联状态,执行、睡眠或I/O(挂起在内核中)。 - xwlan
Q2:如果有适当的符号(虽然不是在所有视图中),该工具将符号解析为源代码行。感谢您的评论。事实上,在开发dprofiler时,我参考了您的想法 :)。 - xwlan
显示剩余3条评论

1
我刚刚完成了CxxProf的第一个可用版本,它是一个便携式手动插桩C++性能分析库。
它满足以下要求:
- 分析多线程应用程序 - 支持在同一网络中分析多个进程 - 它是为了最佳的易用性和最简单的集成而编写的 - 它是免费的,无论是免费的啤酒还是言论自由 - 它将与VS05、08、10、12和13一起工作。也可以在Linux上使用g++。目前已在VS 2013 Express上进行测试。
有关更多信息,请参见项目维基
免责声明:我是CxxProf的主要开发人员。

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