【问题标题】:How can I find out how much time is spend on each line in C/C++ code?如何找出 C/C++ 代码中每一行花费了多少时间?
【发布时间】:2012-02-19 21:49:28
【问题描述】:

我正在尝试寻找一个分析工具,我可以用它找出在 C/C++ 程序中的每一行代码上花费了多少时间。我主要使用 gcc 在 Linux 平台(Ubuntu、Gentoo、SL)上工作。我使用 gprof,但有时我需要“每行”信息。

有什么建议吗?谢谢!

【问题讨论】:

  • 在 GCC 中你可以使用`-pg` 编译并使用gprof。它不完全是“每行”,而是相当接近的。
  • 你的平台是什么?
  • @Kerrak:我忘了说,我使用 gprof,但有时它必须是“每行”。
  • @rotoglup:相应地编辑了帖子。
  • 也许您应该告诉我们其中一个您需要逐行分析并且gprof 还不够的时候。根据我的经验,在 99% 的情况下,如果需要这样的细节来发现性能问题,他们很可能在更大范围内做错了什么......

标签: c++ c profiling


【解决方案1】:

在 linux 上你可以使用oprofile。这是一个基于示例的分析器,几乎可以在任何平台上运行,并支持性能监控寄存器(如果可用)。在 x86 上,它适用于 AMD 和 Intel。

您可以将它用作独立程序,它会为您提供带注释的源代码,但是有一个可用于 Eclipse 的插件(linuxtools),它可以很好地集成到 IDE 中。

【讨论】:

    【解决方案2】:

    AMD CodeAnalyst 是你最好的选择,它是完全免费的,它可以在 windows 和 linux 上运行,虽然它主要用于 AMD CPU,所以非 AMD CPU 不会获得基于 MSR 的分析选项。在 Windows 下,它还可以很好地集成 Visual Studio 2008 和 2010。

    对于非供应商特定的免费分析器,您可以尝试very sleepy,它也恰好是开源的。

    【讨论】:

      【解决方案3】:

      Zoom 所做的是在挂钟时间获取堆栈样本。

      那么任何函数或代码行负责的时间百分比就是它出现的样本的分数。 例如,如果一行代码在 30% 的堆栈样本上,而您可以避免执行它,则总执行时间将减少 30%

      无论 I/O、递归、竞争进程、交换,以及所有让许多分析器感到困惑的事情,都是如此。

      【讨论】:

      • @drhirsch:正如你从我们之前的谈话中知道的那样,Zoom 也不容易找到一些东西,但随着分析器的发展,它正在做所有正确的事情,恕我直言。
      猜你喜欢
      • 2014-01-13
      • 1970-01-01
      • 2011-07-05
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 2022-10-08
      • 1970-01-01
      相关资源
      最近更新 更多