如何分析代码段?
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.
【讨论】:
以上是关于如何分析代码段?的主要内容,如果未能解决你的问题,请参考以下文章