如何找出 C/C++ 代码中每一行花费了多少时间?
Posted
技术标签:
【中文标题】如何找出 C/C++ 代码中每一行花费了多少时间?【英文标题】:How can I find out how much time is spend on each line in C/C++ code? 【发布时间】:2012-02-19 21:49:28 【问题描述】:我正在尝试寻找一个分析工具,我可以用它找出在 C/C++ 程序中的每一行代码上花费了多少时间。我主要使用 gcc 在 Linux 平台(Ubuntu、Gentoo、SL)上工作。我使用 gprof,但有时我需要“每行”信息。
有什么建议吗?谢谢!
【问题讨论】:
在 GCC 中你可以使用`-pg` 编译并使用gprof
。它不完全是“每行”,而是相当接近的。
你的平台是什么?
@Kerrak:我忘了说,我使用 gprof,但有时它必须是“每行”。
@rotoglup:相应地编辑了帖子。
也许您应该告诉我们其中一个您需要逐行分析并且gprof
还不够的时候。根据我的经验,在 99% 的情况下,如果需要这样的细节来发现性能问题,他们很可能在更大范围内做错了什么......
【参考方案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 也不容易找到一些东西,但随着分析器的发展,它正在做所有正确的事情,恕我直言。以上是关于如何找出 C/C++ 代码中每一行花费了多少时间?的主要内容,如果未能解决你的问题,请参考以下文章