valgrind是一款可用于检测内存、分析函数调用的程序,程序内部可以仿真模拟指定的进程。

下载与安装

http://valgrind.org/downloads/current.html下载source code后,参照目录下的README文件安装:

  1. ./configure --prefix=安装路径(只可用绝对路径,安装后不要手动移动目录)
  2. make
  3. make install

成功安装后,在 安装路径/bin 下可运行valgrind
valgrind安装与使用

使用

valgrind --tool=可以选择想用的工具。这里介绍两个:memcheck与callgrind

memcheck

memcheck是内存检测工具,可以检测程序有无内存泄漏或是内存访问错误

valgrind --tool=memcheck --leak-check=full --trace-children=yes 目标解析文件的路径(这里要用绝对路径)

如果知道进程id,也可以直接
valgrind --tool=memcheck --leak-check=full --trace-children=yes /proc/pid/exe

其中–trace-children=y选项表示要追踪子线程。执行后会从Main入口模拟运行一遍指定的程序,执行完后显示有无错误。
valgrind安装与使用
图中可以看到,申请两次但只释放了一次内存,说明有内存泄漏。同时标明了申请内存的call trace。

callgrind

callgrind可以显示目标文件的函数调用关系。生成的分析文件配合gprof2dot.py与dot可以生成图片

  1. valgrind --tool=callgrind 目标解析文件的路径(这里要用绝对路径) 会生成一个.out文件
  2. gprof2dot.py -f callgrind xxx.out > xxx.dot 将out文件转换成dot文件。gprof2dot.py可于https://github.com/jrfonseca/gprof2dot下载,下载后放在/usr/bin下可直接运行。
  3. dot -Tpng xxx.dot -o xxx.png dot转换成png。如果生成失败了,有可能是python版本不匹配,注意升级或是切换版本

valgrind安装与使用
生成的调用关系图如上

相关文章: