如何找出 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++ 代码中每一行花费了多少时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何跟踪sql中每一行的差异

linux如何查找文件中每一行数据的大小?

如何使用 Bonferroni 校正计算数据框中每一行的超几何测试

找出一行在数据库中占用了多少存储空间

如何找出 Redshift 表中每一列的大小?

如何访问 UITableView 中每一行的照片相册