分析用C或C ++编写的程序

时间:2009-03-17 13:06:06

标签: c++ c profile

您建议使用哪种方法来分析C / C ++代码并确定哪些部分花费的时间最多。目前,我只是依赖于日志,但当然由于引入了不必要的延迟,因此信息不准确。

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

平台:Linux

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

9 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

取决于平台。如果你正在使用MSVC,它的某些版本内置了一个分析器.AMD和Intel也都有分析器(CodeAnalyst和VTune)。

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

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

答案 4 :(得分:1)

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

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

如果您总是在代码的相同部分,那么您已经找到了大部分时间可能花费的地方。

答案 5 :(得分:1)

你显然想要两件事:

  1. 分析您的代码&测量它。

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

  3. 这些是不同的问题。尽管你可能被告知,但它们并不相同。

    对于问题(1),将建议许多好的剖析器。

    问题(2)剖析器只能间接帮助 有一种更简单,通常更有效的技术。

    Look Here

答案 6 :(得分:1)

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

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

Gprof

Oprofile

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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