如何分析代码段?

Posted

技术标签:

【中文标题】如何分析代码段?【英文标题】:How to profiling sections of code? 【发布时间】:2012-03-03 01:09:51 【问题描述】:

我需要分析一个用 C 编写的软件。现在的问题是,虽然 gprof 或我自己的开始计时器/结束计时器函数调用会为我提供在每个函数中花费的时间,但我不知道哪个是每个功能中最耗时的部分。有些人可能将其称为微优化,但这正是当下的需要!

实现这一点的方法之一是“手动”在 for 循环中放置开始/结束计时器调用(可能不止一个)。在这种情况下,更明智的做法是允许使用宏启用/禁用这些调用。

但我想自动化这个检测?

你能告诉我是否有一个好的工具可以实现同样的目标吗?如果我可以从脚本中重复调用检测程序,然后找到代码的每个“部分”花费的平均时间,那将是理想的。目前,节是一个松散定义的术语,但“工具”可以对节的定义有更具体的定义。

如果我能以某种方式了解哪些工具将是有用的,那也会很有帮助

【问题讨论】:

我还去了乔治亚理工学院。请告诉那里的教授停止销售 gprof ;-) 【参考方案1】:

您可以尝试将Callgrind(Valgrind 工具之一)与KCachegrind 结合使用。另见this question。

【讨论】:

【参考方案2】:

我自己没有使用过它,但我听说 Valgrind 检测框架 (http://www.valgrind.org/) 有一些工具可以实现您想要完成的任务所需的非常细粒度的分析。

【讨论】:

【参考方案3】:

您希望代码尽可能快地运行,对吗?

gprof 是一个测量工具。它可以帮助评估替代实现,如the original authors wrote。 他们并没有说它对于定位需要替代实现的代码是有效的,事实上并非如此,尽管几乎每个人都认为它是。

谬误在于测量定位,但如果你想在房间里找到一头大象,你是否需要测量它才能知道它在那里? 不,你睁开眼睛。

Here's a way to open your eyes to what your program is doing.

【讨论】:

以上是关于如何分析代码段?的主要内容,如果未能解决你的问题,请参考以下文章

C语言程序段的定义实际应用分析

vue 2.0 路由切换以及组件缓存源代码重点难点分析

u-boot源码汇编段简要分析

PHP 分析 - 为相同的代码段获得非常不同的持续时间

数据结构与算法复杂度分析

Python数据分析常用30段优化代码