一、valgrind memcheck--内存错误检测器
可以检测下列与内存相关的问题:
未释放内存的使用对释放后内存的读/写对已分配内存块尾部的读/写内存泄露不匹配的使用malloc/new/new[] 和 free/delete/delete[]重复释放内存valgrind --tool=memcheck ./a.out
二、 valgrind massif--堆分析器
监视程序内存分配。若是在运行程序中发现占用内存较多,想要知道使用内存较多的代码行,可以使用valgrind的massif工具
Massif是一个内存剖析工具。通过不断的取程序堆的快照来达到监视程序内存分配的目的。
valgrind --tool=massif ./a.out
会生成一个massif文件,可以使用ms_print来解析这个输出文件
ms_print massif.out.32682(进程pid)
三、valgrind cachegrind--缓存和分支预测分析器
valgrind --tool=cachegrind ./a.out
指令运行结果: 打印摘要信息
除打印信息外,还会将更详细的信息写入cachegrind.out.pid
cg_annotate cachegrind.out.pid
四、valgrind callgrind--调用图缓存生成分析器
callgrind使用cachegrind的统计信息Ir(I cache reads, 即一条指令执行的次数)来统计程序中函数的调用情况,建立函数调用关系图,在运行结束后,会把结果写入callgrind.out.pid文件中
valgrind --tool=callgrind --separate-threads=yes ./a.out
--separate-threads=yes 表示要查看多线程相关数据
这条指令会在当前目录下生成一个callgrind.out.pid文件
1. 查看文件
callgrind_annotate callgrind.out.pid
结果示例 会给出Ir 文件:函数
2. 注解源文件
callgrind_annotate callgrind.out.pid XX.c
会将XX.c的每一行代码调用次数标清楚