使callgrind在kcachegrind调用图中显示所有函数调用

时间:2015-11-17 23:51:05

标签: valgrind callgrind kcachegrind

我使用valgrind工具 - callgrind和kcachegrind来分析一个大型项目,并想知道callgrind是否有一种方法可以报告来自所有函数的统计数据(而不仅仅是最昂贵的函数)。

具体 - 当我在kcachegrind中可视化调用图时,它只包含那些非常昂贵的函数,但我想知道是否有办法在调用图中包含项目中的所有函数。用于生成分析信息的命令如下:

valgrind --dsymutil=yes --tool=callgrind $EXE 

我不确定是否必须向valgrind提供任何选项,或者可能在不同的优化中编译应用程序。这可能是微不足道的,但我无法找到解决方案。关于这一点的任何指针高度赞赏。

谢谢!

3 个答案:

答案 0 :(得分:6)

enter image description here

昨天发生在我身上。如图所示,我在kcachegrind的调用图中找到了一个右键菜单,您可以在其中设置阈值,高于该阈值可以显示节点。

还有一个选项"没有最小值"但是它无法选择。我想也许是因为,如果每个函数,无论它多么微不足道,占用一个节点,图形可能太大而无法处理。

我刚发现脚本gprof2dot可以处理这个问题 该脚本可以将callgrind的输出转换为dot,可以将其显示为图形。该脚本有两个相关参数:

  • -n PERCENTAGE, --node-thres=PERCENTAGE消除低于此阈值的节点[默认值:0.5]。为了可视化图表中的所有节点,您可以设置参数-n0
  • -e PERCENTAGE--edge-thres=PERCENTAGE消除低于此阈值的边缘[默认值:0.1]。为了可视化图表中的所有边缘,您可以设置参数-e0

为了生成完整的调用图,您可以使用这两个选项(-n0-e0)。

我已经尝试过这个,但是,由于生成的图形太大,点软件警告我"图形对于cairo-renderer位图来说太大了。按比例缩小0.328976以适应。 "但您可以将输出格式设置为eps,以便处理此问题。您也可以更改参数以适应您的目标。

实施例

我们假设您有一个名为callgrind.out.1992的callgrind输出文件。要生成完整的调用图,您可以使用:

gprof2dot.py -n0 -e0 ./callgrind.out.1992 -f callgrind

要生成图表的PNG输出图像,您可以运行以下命令:

gprof2dot -n0 -e0 ./callgrind.out.1992 -f callgrind > out.dot

dot -Tpng out.dot -o out.png

现在您有一张带有完整图表的out.png图片。

请注意使用-f参数来指定配置文件格式(在我们的示例中为callgrind)。

答案 1 :(得分:3)

我正在使用的命令是 valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes $EXE并且就我所见,它包含了调用图中的所有函数。

希望它有所帮助。

答案 2 :(得分:0)

我将使用可以生成完整调用图的信息来完成rengar的答案,并提供完整流程的示例。

您可以使用gprof2dot显示调用图中的所有函数。该脚本可以将callgrind的输出转换为dot,可以将其显示为图形。该脚本有两个相关参数:

  • -n PERCENTAGE--node-thres=PERCENTAGE以消除低于此阈值的节点[默认值:0.5]。要显示图表中的所有节点,您应将此参数设置为-n0
  • -e PERCENTAGE--edge-thres=PERCENTAGE消除低于此阈值的边缘[默认值:0.1]。要显示图表中的所有边缘,您应将此参数设置为-e0

要生成完整调用图,您可以使用以下两个选项:-n0-e0

实施例

假设您有一个名为callgrind.out.1992的callgrind输出文件。要生成完整的调用图,您可以使用:

gprof2dot -n0 -e0 ./callgrind.out.1992 -f callgrind

要生成图形的PNG输出图像,可以运行以下命令:

gprof2dot -n0 -e0 ./callgrind.out.1992 -f callgrind > out.dot

dot -Tpng out.dot -o out.png

现在您有一张带有完整图表的out.png图片。

请注意使用-f参数来指定配置文件格式(在我们的示例中为callgrind)。