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

use*_*733 4 valgrind callgrind kcachegrind

我正在使用valgrind工具-callgrind和kcachegrind对大型项目进行概要分析,并且想知道是否有一种方法可以使callgrind报告所有功能(不仅是最昂贵的功能)的统计信息。

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

valgrind --dsymutil=yes --tool=callgrind $EXE 
Run Code Online (Sandbox Code Playgroud)

我不确定是否必须为valgrind提供任何选项,或者是否可能以其他优化方式编译应用程序。这可能有些琐碎,但我找不到解决方案。任何对此的高度赞赏。

谢谢 !

ren*_*gar 7

在此处输入图片说明

昨天发生在我身上。如图所示,我在kcachegrind的调用图中发现,有一个右键单击菜单,您可以在其中设置阈值,高于该阈值将可视化该节点。

还有一个选项“ no minimum”,但是不能选择。我认为可能是因为,如果每个函数(无论多么琐碎)占用一个节点,那么该图可能太大而无法处理。

我刚刚发现脚本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在我们的示例中)。


小智 5

我正在使用的命令是 valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes $EXE,据我所知,它包括调用图中的所有功能。

希望能帮助到你。