C gperftools - 分析 C 代码

Posted

技术标签:

【中文标题】C gperftools - 分析 C 代码【英文标题】:C gperftools - profiling C code 【发布时间】:2014-12-24 07:53:40 【问题描述】:

我正在尝试为我使用 gperftools 的代码生成分析(逐行源代码)。

gcc a.c -lprofiler -Wl,--no-as-needed -lprofiler -Wl,--as-needed

CPUPROFILE=out.ptof ./a.out 

但是

pprof  ./a.out out.ptof --inuse_objects --lines --heapcheck  --edgefraction=1e-10 --nodefraction=1e-10 --gv
Using local file ./a.out.
Using local file out.ptof.
No nodes to print

为什么 pprof 声明“没有要打印的节点”?

【问题讨论】:

【参考方案1】:

好像theremightbeseveralreasons。

引用最有可能的(假设您的代码很简单):

如果您看到“没有要打印的节点”之类的消息 [...] 它只是意味着代码太快以至于无法对其进行分析 - 基本上,分析器甚至没有机会取样。

还有:

在默认模式下,“慢”路由不会有分析数据,因为它使用的 CPU 周期很少(您会看到消息“没有要打印的节点”)。

所以你可能需要人为地减慢你的程序...

【讨论】:

即使我包含虚拟 for 循环 .. 我仍然得到相同的输出 是否有与您的问题相关的链接?你把什么叫做“虚拟循环”? 我不确定,但现在每当我运行时,我都会收到“禁用分析器,因为 SIGPROF 处理程序已在使用中。”信息。 Dummy lops 仅适用于从 1 到 100000 的循环 也许有些事情没有正确结束(已经在使用)?您应该在干净的环境下重试。关于你的循环:如果除了计数之外没有对循环进行任何操作,编译器可能会对其进行优化并忽略它。

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

cmake:无法链接到谷歌分析器(gperftools)

Linux声卡驱动移植和測试

cmake:无法链接谷歌分析器(gperftools)

我已经设置了 CPUPROFILE 环境变量并链接了 -lprofiler。为啥 gperftools 没有启动分析器?

解释 gperftools 在多线程工作负载上的结果

gperftools 错误:/usr/local/bin/pprof 第 3618 行的字符串之外的 substr