简介
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等。Valgrind可以检测内存泄漏和内存违例,还可以分析cache的使用等,灵活轻巧而又强大,能直穿程序错误的心脏,真可谓是程序员的瑞士军刀。
和gprof分析工具类似,它对程序的运行能给我们提供很多的信息。不过和gprof不同,它不需要在编译源代码时附加特殊选项,但加上调试选项是推荐的。Callgrind收集程序运行时的一些数据,建立函数调用关系图,还可以有选择地进行cache模拟。在运行结束时,它会把分析数据写入一个文件。
此处的性能分析主要是使用参数callgrind如函数调用栈来分析。
使用方法
在linux下,使用命令valgrind --tool=callgrind execname
如果是多线程,可以增加选项--separate-threads=yes
会在当前目录下生成文件,文件名字为“callgrind.out.进程号"
如果为多线程,则会生成多个文件。
文件解析
生成的文件有两种处理方式:
一种为转换为dot文件,然后再将dot文件转换为图片。
第一、生成dot文件
gprof2dot.py -f callgrind -n10 -s callgrind.out.31113 > valgrind.dot
第二、将dot文件转换成图片
dot -Tpng valgrind.dot -o valgrind.png另一种方式为使用软件 qcachegrind.exe
用软件打开文件后,会显示如下图:
通过上述图中百分比,可以分析出cpu调用过程中的瓶颈,从而优化程序。