【问题标题】:Profiling programs written in C or C++分析用 C 或 C++ 编写的程序
【发布时间】:2009-03-17 13:06:05
【问题描述】:

您认为最好的工具来分析 C/C++ 代码并确定哪些部分花费的时间最多。目前,我只是依靠日志,但由于引入了不必要的延迟,因此信息当然不准确。

如果存在这样的工具,该工具最好还能够检测/建议可以优化的区域。

平台:Linux

应用程序应在嵌入式环境中使用,因此它应该是轻量级和外部的(不是某些 IDE 上的插件)。

【问题讨论】:

  • Linux。我将在嵌入式环境中使用它,因此它也应该是轻量级和外部的(不是某些 IDE 的插件)。

标签: c++ c profile


【解决方案1】:

我可以衷心推荐callgrindKCachegrind 结合使用。

【讨论】:

  • kcachegrind 很容易成为我见过的最好的可视化工具,但请注意,如果您有源代码,gprof 将会快得多,并且如果性能绝对关键或者您想采取仔细查看硬件性能计数器以查找问题,OProfile 可能是要走的路。
【解决方案2】:

linux/freebsd 上的“gprof”是一个非常简单有效的工具,可以识别哪些例程在运行时占用 CPU。它提供了函数的嵌套和平面配置文件。它为您提供在分析器运行时执行的每个函数占用的 CPU 时间百分比,以及函数本身占用的百分比,以及其子函数占用的百分比。这有助于您轻松隔离违规功能。

【讨论】:

  • 这就是我上次需要提高性能时所需要的。
【解决方案3】:

我使用 Microsoft Visual C++ 的分析器获得了很好的体验,还有其他外部程序,例如 Intels VTune,但大多数都不是免费的。

【讨论】:

    【解决方案4】:

    取决于平台。如果您使用的是 MSVC,它的某些版本会内置分析器。AMD 和 Intel 都有可用的分析器(CodeAnalyst 和 VTune)。

    在 Linux 上,我唯一使用的是 gprof,但我知道还有其他的(我认为 AMD 或 Intel 的也可能在 Linux 版本中可用)

    当然,整个 Valgrind 套件也可能会有所帮助。一些工具,如 callgrind 或 cachegrind 可以为您提供大量有关性能的信息。

    【讨论】:

      【解决方案5】:

      有很多很好的分析工具,比如 Quantify 或 KCachegrind。这些工具的一个问题是它们会降低运行时性能,因此在某些大型系统上它们可能无法很好地扩展。

      有时只需在调试器中运行并按 ctrl-c,查看堆栈跟踪并重复此操作可能 4 次就足够了。

      如果您始终处于代码的同一部分,那么您已经找到了您可能大部分时间都花在了哪里。

      【讨论】:

      • 宾果游戏。特别是,您应该寻找位于多个调用堆栈样本上的调用站点。
      【解决方案6】:

      你显然想要两件事:

      1. 分析您的代码并对其进行测量。

      2. 检测可以优化的区域。

      这些是不同的问题。尽管有人告诉过您,但它们并不相同。

      对于问题 (1),将推荐许多好的分析器。

      对于问题 (2),分析器只能间接提供帮助。
      有一种更简单且通常更有效的技术。

      Look Here

      【讨论】:

        【解决方案7】:

        如果我们谈论的是 UNIX 世界,我会选择 gprof / oprofile。

        您确实需要重新编译您的应用程序(至少使用 gprof)。

        Gprof

        Oprofile

        【讨论】:

          【解决方案8】:

          如果您使用的是 Windows,我建议您使用 AQTime。支持几乎所有的编译器,包括 .NET、Delphi 和 VB(当然还有所有 C++ 编译器 (; ),并且是我尝试过的最好的分析工具。它不仅仅是一个性能分析器。

          【讨论】:

            【解决方案9】:

            对于性能测量oprofile 是一个不错的选择,因为Linux Tools Project 中有一个用户友好的 Eclipse 插件。

            【讨论】:

              猜你喜欢
              • 2010-12-10
              • 2010-11-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-22
              • 1970-01-01
              • 1970-01-01
              • 2011-03-03
              相关资源
              最近更新 更多