一、Valgrind简介
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。
你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。
使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。
它内部支持多个工具集,包括内存错误检测器,线程错误检测器,缓存分析器、堆分析器等,默认使用的是内存检测器(memcheck), 它是使用最多的一个内存检测工具。
源码下载:http://valgrind.org/downloads/current.html
参考文档:http://valgrind.org/docs/manual/manual.html
二、CentOS7.x上的valgrind编译安装
# yum -y install gcc make automake
# wget https://sourceware.org/ftp/valgrind/valgrind-3.14.0.tar.bz2
# tar -jxvf valgrind-3.14.0.tar.bz2
# cd valgrind-3.14.0
# cat autogen.sh
# ./autogen.sh
# ./configure --prefix=/usr/local/valgrind
# make
# make install
三、valgrind工具使用
# /usr/local/valgrind/bin/valgrind --help
四、生成可视化的图形
生成可视化的图形需要下载gprof2dot:https://pypi.org/project/gprof2dot/#files
这是个Python脚本,把它下载之后修改其权限chmod +7 gprof2dot.py ,并把这个脚本添加到$PATH路径中的任一文件夹下,我是将它放到了/usr/bin目录下,这样就可以直接在终端下执行gprof2dot.py了。
首先执行 gcc -pg -o tmp tmp.c,然后运行该程序./tmp,程序运行完成后会在当前目录下生成gmon.out文件(这个文件gprof在分析程序时需要),再执行gprof ./tmp | gprof2dot.py |dot -Tpng -o report.png,打开report.png结果:
再来看 Callgrind的生成调用图过程,执行:valgrind --tool=callgrind ./tmp,执行完成后在目录下生成"callgrind.out.XXX"的文件这是分析文件,可以直接利用:callgrind_annotate callgrind.out.XXX 打印结果,也可以使用:gprof2dot.py -f callgrind callgrind.out.XXX |dot -Tpng -o report.png 来生成图形化结果:
可以看到,生成的结果非常详细,甚至连函数入口,及库函数调用都标识出来了!
五、参考
Valgrind的安装及简单使用
https://www.cnblogs.com/qujingtongxiao/p/9901213.html
https://segmentfault.com/a/1190000017465212?utm_source=tag-newest
Valgrind使用说明
https://www.cnblogs.com/wangkangluo1/archive/2011/07/20/2111248.html
Linux 下Valgrind泄漏检查工具
https://blog.csdn.net/qq_33663749/article/details/70224241
valgrind工具使用
https://blog.csdn.net/yayaayaya123/article/details/81942745
valgrind,解决内存管理问题的最佳利器
https://baijiahao.baidu.com/s?id=1652356863601374476&wfr=spider&for=pc