gprof 中计算的时间是不是包括未分析的函数所花费的时间?
Posted
技术标签:
【中文标题】gprof 中计算的时间是不是包括未分析的函数所花费的时间?【英文标题】:Would the time counted in gprof include what is spent in functions that are not profiled?gprof 中计算的时间是否包括未分析的函数所花费的时间? 【发布时间】:2012-08-27 16:21:11 【问题描述】:我现在有一个项目,我想对其进行分析,但它使用了另一个我无法控制的库。说如果有这样的功能:
#include <library.h>
void function(...)
// do something
for (...)
// ...
library_function(...);
// ...
// do something
让我们假设 library_function 来自另一个未在启用分析的情况下编译的静态库。现在,如果 gprof 告诉我运行 function
需要 10 秒,包括它的所有孩子,这是否包括在 library_function
中花费的时间?
【问题讨论】:
【参考方案1】:不,因为gprof
的工作方式,它对程序计数器进行采样,确定程序计数器在哪个函数中,并为该函数增加自身时间。
此外,它还计算任何函数 A 调用任何函数 B 的次数。
据此,它会尝试解决其他所有问题。
当然,这只适用于它知道的函数。
很聪明,不过you can do better。
已添加:由于有人明智地决定删除上述帖子,这里简要总结一下如何做得更好:
Try this instead.Here's an example of a 44x speedup.Here's a 730x speedup.Here's an explanation of the statistics.Here's an answer to critiques.Here's an 8-minute video demonstration.
【讨论】:
非常感谢您的澄清。但不幸的是,我正在开发一个 NDK 库。我还没有找到解决办法。 @fefe:没有可以运行代码的调试器吗?如果您可以通过 Ctrl-C 或其他方式打断它,这就是您所需要的。 我试过了,我相信它应该很有用。但是我的调试器现在遇到了一些问题,现在无法进入(或在断点处停止)本机代码。所以我唯一得到的是我的图书馆花了很多时间,但不完全是在哪里。但这超出了这个问题的范围。 @fefe:这并不总是容易做到的。有一次我不得不使用硬件在线仿真器,并破译十六进制存储器。这并不容易,但没有其他办法,而且确实奏效了。 @wojciii:我编辑了答案。它可能比您想阅读或观看的要多,但我不得不努力反对对此的意见潮流,即“测量,测量”和“使用分析器”。这些只是演讲厅和博客到博客的回声。有很多人理解这一点——我只是最直言不讳的。对于真正认真的性能调整,简单的手动方法是迄今为止最有效的方法,这些链接给出了充分的理由。以上是关于gprof 中计算的时间是不是包括未分析的函数所花费的时间?的主要内容,如果未能解决你的问题,请参考以下文章