Linux平台下的valgrind工具记录

Linux平台下的valgrind工具记录

——Ubuntu14.04.5

apt-get install python graphviz valgrind

注:安装这三个工具

gcc -Wall -g valgrind_demo.c -o valgrind_demo

注:编译示例程序

 

Valgrind包含下列工具:

1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。

2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。

3、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。

4、helgrind:用于检查多线程程序的竞态条件。

5、massif:堆栈分析器,指示程序中使用了多少堆内存等信息。

6、lackey:

7、nulgrind:

这几个工具的使用是通过命令:valgrand --tool=name 程序名来分别调用的,当不指定tool参数时默认是 --tool=memcheck

 

memcheck工具

其中memcheck能检测以下问题:

1、对未初始化内存的使用;

2、读/写释放后的内存块;

3、读/写超出malloc分配的内存块;

4、读/写不适当的栈中内存块;

5、内存泄漏,指向一块内存的指针永远丢失;

6、不正确的malloc/free或new/delete匹配;

7、memcpy()相关函数中的dst和src指针重叠。

 

valgrind --tool=memcheck ./memleak

或者

valgrind --tool=memcheck --leak-check=full ./memleak

检查内存泄露和指针越限的问题

 

也可以结合gdb使用,例如:valgrind --tool=memcheck --leak-check=full gdbmemleak

 

也可以将输出定义为文件,例如:valgrind--tool=memcheck --leak-check=full --log-file=mem_leak.log gdb valgrind_demo

 

callgrind工具

还有callgrind和gprof类似的分析工具,但它对程序的运行观察更是入微,能给我们提供更多的信息。和gprof不同,它不需要在编译源代码时附加特殊选项,但加上调试选项是推荐的。Callgrind收集程序运行时的一些数据,建立函数调用关系图,还可以有选择地进行cache模拟。在运行结束时,它会把分析数据写入一个文件。callgrind_annotate可以把这个文件的内容转化成可读的形式。

生成callgrind.out文件,例如:valgrind--tool=callgrind ./valgrind_demo

其中 ./valgrind_demo就是我们要分析的程序。执行完毕后,就会在当前目录下生成一个文件。文件名为“callgrind.out.进程号”。如,callgrind.out.31113。注意,对于daemon进程的调试,不要通过kill -9方式停止。如果你调试的程序是多线程,你也可以在命令行中加一个参数–separate-threads=yes。这样就会为每个线程单独生成一个性能分析文件。

把callgrind生成的性能数据转换成dot格式数据需要使用gprof2dot.py脚本,这个只是个脚本可以放到/usr/sbin/中,这个脚本用来把callgrind生成的性能数据转换成dot格式数据

python/usr/sbin/gprof2dot.py -f callgrind -n10 -s callgrind.out.31113 >valgrind_demo.dot

使用dot把数据生成图片

dot -Tpngvalgrind_demo.dot -o valgrind_demo.png

Linux平台下的valgrind工具记录_第1张图片

你可能感兴趣的:(linux,软件使用)