昨天我突然想到了。如图所示,我在kcachegrind的调用图中发现,有一个右键菜单,在里面可以设置节点可视化的阈值。
还有一个选项“无最小值”,但不能选择。我想可能是因为,如果每个函数,无论它多么微不足道,都占用一个节点,那么图可能太大而无法处理。
我刚刚发现脚本gprof2dot可以处理这个问题。
该脚本可以将 callgrind 的输出转换为点,可以将其可视化为图形。该脚本有两个相关参数:
-n PERCENTAGE, --node-thres=PERCENTAGE
消除低于此阈值的节点 [默认值:0.5]。为了可视化图中的所有节点,您可以将参数设置为-n0
-e PERCENTAGE
,--edge-thres=PERCENTAGE
以消除低于此阈值的边缘 [默认值:0.1]。为了可视化图中的所有边,您可以设置参数,如-e0
为了生成完整的调用图,您将使用两个选项 (-n0
和-e0
)。
我试过这个,但是,由于生成的图形太大,点软件警告我“图形对于 cairo-renderer 位图来说太大了。按 0.328976 缩放以适应。”但是您可以将输出格式设置为 eps可以处理这个。您还可以更改参数以适应您的目标。
例子
假设您有一个 callgrind 输出文件,名为callgrind.out.1992
. 要生成完整的调用图,您将使用:
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
在我们的例子中)。