解释 callgrind 数据
Posted
技术标签:
【中文标题】解释 callgrind 数据【英文标题】:Interpreting callgrind data 【发布时间】:2012-02-14 15:00:38 【问题描述】:我的应用需要一个动态调用图。我使用callgrind
工具(valgrind
套件)运行它并得到callgrind.out.xxxxx
文件。现在,我想对这些数据进行图形表示。 KCacheGrind
对我没有多大帮助,因为它绘制了图形的有限部分(绘制了 ~50 个函数而不是 ~1500 个配置文件,我不知道如何解决这个问题)。如何获得将绘制所有函数的图形图像?
【问题讨论】:
callgrind.out 是否包含图中缺失的数据?此外,如果您按“自我”排序,是否还有相关的时间/指令用于未列出的功能?我不记得遗漏了相关部分的案例。 是的,callgrind.out 包含我需要的所有数据(包括图中缺少的函数),并且图中未列出的大多数函数都花费了相关的时间/指令。不知道为什么KCacheGrind
只画了一部分。 UPD:如果我在函数列表中选择我想要的函数(在默认 KCacheGrind
布局中放置在左侧),则重新绘制图形以显示此函数,但仍然缺少其他函数。我需要一次整个图表。提前致谢。
【参考方案1】:
使用以下命令使用 gprof2dot 生成 graph.png
$ ./gprof2dot.py --format=callgrind --output=out.dot /path/to/callgrind.out
$ dot -Tpng out.dot -o graph.png
【讨论】:
【参考方案2】:好的,我找到了方法。生成的callgrind.out
文件可以使用gprof2dot 转换为dot
文件(是的,这个工具也可以解析callgrind
文件)。然后你可以使用dot -T<type> dotfile.dot -o graphfile.<type>
得到图形图像
【讨论】:
有趣。生成的图对 1500 个函数是否可读? 交易是,实际上我需要比较来自两个不同版本软件的两个图表,所以没有阅读/理解整个图表的目的,我只需要一些路径,我知道我应该在哪里寻找他们。 OTOH,在我的Core i7-2600 3.4GHz / 8 Gb DDR3
上生成png
图像大约需要5 分钟,生成的文件大小为23 MBytes。并非所有图像查看器都可以快速正确地处理它(完美的压力测试 IMO :))
我们应该实际输入-T<type>
吗?或者我们用什么替换<type>
?
@nmz787 是的,您需要指定类型。例如dot -Tsvg dotfile.dot -o graphfile.svg
。您还可以使用 pdf 或 png 等格式。以上是关于解释 callgrind 数据的主要内容,如果未能解决你的问题,请参考以下文章
是否有工具可以检查两个 callgrind/valgrind 配置文件的差异?