valgrind (二)--函数调用分析

既上一篇介绍了使用valgrind进行内存泄露和内存越界访问检查之后,本文介绍如何使用valgrind进行函数调用的性能分析。

使用方法

测试代码和编译步骤参见我的上一篇博文《valgrind (一)–检测内存泄露和内存越界》。这里只介绍如何进行性能分析。再开始之前首先安装一下需要使用的工具:

sudo apt-get install valgrind
sudo apt-get install python-pip python
sudo pip install gprof2dot

本文要使用的关键的工具有三个:valgrind、gprof2dot、dot。我的ubuntu18.04系统会自带dot工具,所以这里不用安装。
下面开始介绍调试运行步骤:

  • 利用valgrind生成callgrind.out.×数据文件。
valgrind --tool=callgrind ./mem_leak

本例中生成了callgrind.out.9608文件。

  • 利用gprof2dot把生成的分析数据转换为dot格式
gprof2dot -f callgrind -n10 -e10 callgrind.out.9608 > callgrind.dot

这里会把callgrind数据转换为dot格式,-n和-e选项指定一个百分比,把运行占比低于该值的函数调用会排除在外。

  • 利用dot工具把分析数据转换为图片(PNG格式)
dot -Tpng callgrind.dot -o callgrind.png

最终生成的函数调用图如下所示:
在这里插入图片描述

高级用法

  • 对于多线程的程序,把每个线程调用关系分开显示
valgrind --tool=callgrind --separate-threads=yes ./mem_leak

这个命令会生成多个数据文件,每个文件中表示的是一个thread的数据。

  • 指定根节点来显示调用关系
gprof2dot -f callgrind -n0 -e0 --root=main callgrind.out.9608 > main.dot

这个命令会显示从main函数开始的函数调用关系
在这里插入图片描述

发布了234 篇原创文章 · 获赞 78 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/rikeyone/article/details/90079952
今日推荐