【问题标题】:What are some good profilers for native C++ on Windows? [closed]Windows 上的原生 C++ 有哪些好的分析器? [关闭]
【发布时间】:2010-09-14 06:59:19
【问题描述】:

我正在寻找与本机 C++ 一起使用的分析器。它当然不一定是免费的,但是成本确实会影响购买决定。这是商业作品,所以我不能使用个人或学术许可的副本。

我正在寻找的主要功能是:

  • 流程级别指标
  • 组件级指标
  • 行级指标
  • 支持多线程代码
  • 可用性
  • 成本
  • 需要 Visual Studio 2005 Professional 支持(VS 2008 Professional 高度支持 理想)

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

VTune 看起来非常强大,但它的学习曲线很陡峭。它也是非常“模块化”的,所以你必须弄清楚你需要购买哪些部件。

DevPartner PACE 非常易于使用并提供所有关键功能,但它只有 45 天的试用期。许可版本(Visual C++ BoundsChecker Suite 的 DevPartner)大约 1400 美元一个席位,这是可行的,但 imo 有点高。

对于原生 C++ 和为什么有哪些好的分析器?


另见:

What's Your Favorite Profiling Tool For C++

【问题讨论】:

  • :叹息:我搜索了几分钟的 C++ 和 profiler,但没有找到,因为他们使用了 profiling 而没有使用 profiler 标签。
  • 不幸的是,这个问题不是完全重复的。他们没有说明他们对分析器的要求。下面的讨论缺少 WHY 的详细信息。我认为在给定特定标准的情况下就工具提出建议会更“可回答”?而不是要求一个“最喜欢的”。
  • @Burly:你提出了一个很好的论点——你写了一个很好的、重点突出的问题,而答案可能不一定与适合对方的答案相对应。我会重新打开。
  • 将近 8 年过去了,Visual Studio 如何融入其中?自 VS 2012 以来,我一直在使用内置分析器,并且它在每个版本中都变得越来越好。今天这个领域的(商业)竞争对手有什么优势(如果有的话)?

标签: c++ windows performance profiling


【解决方案1】:

在 Windows 上,GlowCode 价格实惠,相当易于使用,并提供免费试用,以便您查看它是否适合您。

【讨论】:

    【解决方案2】:

    许多人不知道,但 MSFT 正在取得巨大进步,将提高性能的最佳工具免费提供给开发人员 :-)。他们向我们所有人展示了 Windows 跟踪的内部结构:ETW。

    perftools

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

    在决定下载之前查看此处的文档:

    msdn doc

    【讨论】:

    • IIRC perftool 更像是一个系统性能监视器(CPU 与磁盘/网络负载),而不是功能级代码分析器?
    • 这对于实际调优本机应用程序的性能缺乏保真度:(
    • 它似乎还产生了如此巨大的转储,以至于您无法合理地分析任何长时间运行的东西。我也使用了 UIforETW(由 chrome 家伙)。如果您只看基本值,那没关系,但如果您需要深入了解,30s 很快就会开始添加多达 12GB 的数据。
    【解决方案3】:

    试试英特尔 Parallel Studio。目前,它处于测试阶段,但英特尔的名字说明了一切。

    http://www.intel.com/go/parallel

    【讨论】:

      【解决方案4】:

      绝对是 Visual Studio Team System。到目前为止。

      【讨论】:

        【解决方案5】:

        刚刚在 SourceForge (http://lukestackwalker.sourceforge.net/) 上找到了 Luke StackWalker。 不幸的是,它没有“专注于子树”,但它仍然易于使用,使用符号服务器(如果您还没有它,我建议您立即设置它),提供图形可视化,...

        缺点是它不显示子函数的累积时间(样本)。

        另一种选择是“非常困”(http://www.codersnotes.com/sleepy)。可以显示孩子的累计次数,可惜没有使用符号服务器。

        【讨论】:

        • 最新版的Very Sleepy可以使用符号服务器了。
        • @Cyber​​Shadow,你是对的。 0.82版真的很好。不仅涉及符号服务器的使用,还涉及“专注于子树”功能。
        • 如果你觉得 0.82 真的很好,等你看到my own fork(进行中);)
        • 迫不及待想尝试一下。谢谢。
        【解决方案6】:

        CodeXL 也可能值得一看,它可以在 Linux 和 Windows 上运行,尽管它主要用于 OpenGL/OpenCL 调试和分析,但在分析部分下有一个基于时间的 CPU 示例选项可能会有所帮助。它也是免费的,只要 pdb 文件可用就可以工作(在 Windows 上,我不知道它在 Linux 上是如何工作的)(即使是使用 pdb 的发布版本)。

        【讨论】:

        • +1:它是唯一的工具(在免费工具中),可以为我在 Visual Studio Community 2017(C++、STL、OpenCV)的发布配置中构建的二进制文件提供任何有意义的结果
        【解决方案7】:

        我刚刚完成了CxxProf 的第一个可用版本,这是一个用于 C++ 的便携式手动检测分析库。

        它满足您的要求:

        • 配置多线程应用程序
        • 即将支持对同一网络中的多个进程进行分析
        • 它在编写时考虑到了最佳可用性和最简单的集成
        • 像啤酒一样免费,像言论一样免费
        • 它适用于 VS05、08、10、12 和 13。以及 Linux 上的 g++。目前已使用 VS 2013 Express 进行测试。

        请参阅project wiki 了解更多信息。

        免责声明:我是 CxxProf 的主要开发者

        【讨论】:

          【解决方案8】:

          我写了一个开源的轻量级win32/64 profiler,同时支持CPU和内存的profiling, 它有点类似于 VS Profiler,但具有独特的功能,如 CPU 的火焰图和 内存数据。在这里: dprofiler

          【讨论】:

          • 我没有对你投反对票——我不喜欢那样做。但是恕我直言,分析的整个概念是基于程序员社区的大量自欺欺人,需要修改。检查this answer.
          • Mike,我不确定你是否检查过代码,这个分析器不能作为 gprof(CPU 分析)工作,它对所有线程进行采样并计算 IP 的权重,分组为调用树等。没有需要重新编译代码。
          • Mike,我的帖子可能会让您感到困惑,“与 VS 分析器相似”,我需要澄清它的 UI、计数器等与 VS 分析器相似,但它们以不同的方式工作。 VS profiler(在 VS2012 之前)仅对 IP 进行采样。 dprofiler 通过收集所有线程的堆栈跟踪进行采样,因此 dprofiler 可以将堆栈帧分组到调用树中。
          • 我相信你可以创建一个调用树。现在有一些问题:1)您可以在 I/O、睡眠或其他进程块期间获取堆栈样本吗? 2)您能否允许用户以行级分辨率检查单个堆栈样本,以让他们将其与相应代码相关联?我在问,因为否则很容易将大加速隐藏在调用树、热路径或任何此类摘要中,正如该链接所指出的那样。典型的反对意见是用户无法检查足够的样本——这是不正确的。如果他在 2 个样本上发现问题,那就足够了。
          • Q1:是的。无论目标线程在做什么,采样器都会定期采样。在 视图中,每个样本都有一个关联状态,执行、睡眠或 in i/o(在内核中挂起)。
          猜你喜欢
          • 2011-01-09
          • 2010-09-09
          • 2010-10-18
          • 1970-01-01
          • 2011-02-03
          • 2010-11-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多