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 代码的主要内容,如果未能解决你的问题,请参考以下文章
我已经设置了 CPUPROFILE 环境变量并链接了 -lprofiler。为啥 gperftools 没有启动分析器?