What are some good profilers for native C++ on Windows?
我在找一个与本地C++一起使用的分析器。当然,它不一定是免费的,但是成本也会影响到购买决策。这是商业作品,所以我不能使用个人或学术授权的副本。
我要找的主要功能是:
- 过程级指标
- 组件级指标
- 行级别指标
- 支持多线程代码
- 可用性
- 成本
- 需要Visual Studio 2005专业支持(与2008专业支持相比可取的)
我已经使用了英特尔的vtune和computeware的devpartner性能分析社区版。
vtune似乎很强大,但它有一个陡峭的学习曲线。它也是非常"模块化"的,所以你必须弄清楚你需要购买哪些部件。
DevPartner Pace非常易于使用,提供了所有关键功能,但它只是45天的试用期。许可版本(DevPartner为Visual C++ + BunsCheCK套件)约1400美元的座位,这是可行的,但有点高IMO。
什么是一些优秀的本地C++分析器?为什么?
参见:
你最喜欢的C++分析工具是什么?
- 型叹息:我为C++和探查器搜索了几分钟,但没有发现任何东西,因为它们使用了剖析,没有使用探查器标签。
- 型不幸的是,这个问题并非完全重复。他们没有说明他们对探查器的要求。下面的讨论对原因的细节很简短。我认为,在特定的标准下,就某个工具提出建议,会使其更"有责任感"?而不是要"最爱"。
- 型@布雷:你提出了一个很好的论点——你写了一个好的、有重点的问题,答案可能不一定与适合另一个问题的答案一致。我会重新开门。
- 型大约8年后,Visual Studio是如何适应的?自2012年以来,我一直在使用内置的探查器,每次发布都会越来越好。今天(商业)竞争者在这个领域有什么优势(如果有的话)?
在Windows上,Glowcode价格实惠,使用起来相当容易,并且提供了一个免费试用版,这样您就可以看看它是否适合您。
很多人都不知道,但是MSFT正在取得巨大进展,免费将提高性能的最佳工具交给开发人员。他们向我们所有人展示了Windows跟踪的内部结构:ETW。
抛光工具
它是新的Windows SDK for Server 2008和Vista的一部分。如果您的目标是在Windows下进行性能分析和分析(无论使用何种语言),那么您只需下载即可。
在决定下载文档之前,请检查以下文档:
MSDN文档
- iIRC性能工具更像是一个系统性能监视器(CPU与磁盘/网络加载),而不是功能级代码分析仪?
- 这对实际的性能调优本地应用程序缺乏保真度:(
- 它似乎还生成了如此巨大的转储,以至于您无法合理地分析长时间运行的任何内容。我也用了uiforetw(铬人的)。如果你只看基本值,没关系,但是如果你需要深入的了解,30秒很快就会累积到12GB的数据。
尝试Intel Parallel Studio。目前,它是测试版,但英特尔的名字说明了一切。
http://www.intel.com/go/parallel
codexl也值得一看,它可以在Linux和Windows上运行,尽管它主要用于OpenGL/OpenCL调试和分析,但是在分析部分下面有一个基于时间的CPU示例选项,这可能会有所帮助。它也是免费的,只要PDB文件可用(在Windows上,我不知道它在Linux上是如何工作的)(即使是使用PDB的发布版本)。
- + 1:它是唯一的工具(免费的),它可以为Visual Studio社区2017(C++,STL,OpenCV)的二进制内置版本配置提供任何有意义的结果。
刚刚在sourceforge上找到Luke Stackwalker(http://luke stackwalker.sourceforge.net/)。不幸的是,它没有"关注子树",但使用起来仍然很方便,使用符号服务器(如果还没有,我建议您立即设置它),提供图形化的可视化,…
下面是它不显示子函数的累积时间(示例)。
另一种选择是"非常困"(http://www.codersnotes.com/sleepy)。它可以显示子级的累积时间,但不幸的是它没有使用符号服务器。
- 最新版本的非常困可以使用符号服务器。
- @赛博阴影,你说得对。0.82版真的很好。不仅与符号服务器的使用有关,而且还与"关注子树"功能有关。
- 如果你认为0.82真的很好,那就等到你看到我自己的叉子(正在工作);)
- 迫不及待想试试。谢谢。
我编写了一个开源的轻量级win32/64分析器,支持CPU和内存分析,它有点类似于vs profiler,但具有独特的特性,如CPU的火焰图和内存数据。它在这里:DProfiler
- 我没有投你反对票-我不想那样做。但是,imho分析的整个概念是基于程序员社区中的大规模自欺欺人,需要修改。检查这个答案。
- Mike,我不确定您是否检查了代码,这个profiler不能作为gprof(cpu profile)工作,它对所有线程进行采样并计算ips的权重,分组为调用树等。不需要重新编译代码。
- Mike,我的文章可能会让你混淆"类似于vs profiler",我需要澄清它的UI、计数器等与vs profiler类似,但它们的工作方式不同。vs profiler(在vs2012之前)只对ips进行采样。DProfiler通过收集所有线程的堆栈跟踪来采样,这样DProfiler可以将堆栈帧分组到调用树中。
- 我相信你可以创建一个呼叫树。现在有一些问题:1)您可以在I/O、睡眠或其他进程块期间采集堆栈样本吗?2)您是否可以允许用户在行级别的分辨率下检查单个堆栈样本,使其与相应的代码相关联?我这样问是因为,否则大加速很容易隐藏在调用树、热路径或任何类似的摘要中,正如链接所指出的那样。典型的反对意见是用户不能检查足够的样本——这是不正确的。如果他在2个样本上看到问题,那就足够了。
- Q1:是的。无论目标线程在做什么,采样器都会定期采样。在视图中,每个样本都有一个关联状态、执行、休眠或在I/O中(在内核中挂起)。
- 问题2:如果有适当的符号(尽管并非所有视图中都有),该工具会将符号解析为源代码行。谢谢你的评论。事实上,我在开发DProfiler的过程中提到了您的想法。
- 所以,如果我是一个用户,我可以绕过调用树,我可以问:"请随机选择一个堆栈样本(从我选择的线程中),让我检查它"?那么我可以用同样的方式再要几个吗?这是随机暂停方法的关键——绕过摘要,实际检查样本,就好像它们是错误一样。(我知道用户可能会期待总结,但要真正找到加速,您需要实际检查样本。)
- 打开view,移动红色滑块选择一个样本范围,点击以下线程行,每个单元格代表一个样本,底部列表视图显示该样本的完整堆栈跟踪,移动单元格b/f/u/downward上的光标,可以浏览整个历史。为了避免评论中的扩展讨论,抱歉,我不会跟进此主题。我们可以通过电子邮件讨论。
我刚刚完成了CXPROF的第一个可用版本,一个用于C++的便携式手动仪表剖析库。
它满足您的要求:
- 配置多线程应用程序
- 正在对同一网络中的多个进程进行分析支持
- 它的编写考虑到了最佳的可用性和最简单的集成。
- 它像啤酒一样免费,像演讲一样免费
- 它将与VS05、08、10、12和13一起工作。以及Linux上的G++。它目前已经通过了vs 2013 Express的测试。
有关详细信息,请参见项目wiki。
免责声明:我是cxxprof的主要开发者
当然是Visual Studio团队系统。到目前为止。