0. 准备工作
安装valgrind和gprof2dot
sudo apt-get install valgrind
sudo pip install gprof2dot
1. 修改cmakelists.txt
用来设置编译器参数:-Wall
表示开启编译过程中的warning,-g
表示bug在程序的哪行更方便我们调试程序,-pg
用于生成gmon.out文件(gprof分析时需要)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g -pg")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
2. 使用valgrind
用来检查程序的bug(内存泄露):将诊断信息输入到.log
文件中,根据提示修改bug,mian
是你自己程序生成的可执行文件,要到该目录下使用下面命令,打开log就可以看到错误信息了
valgrind --tool=memcheck --leak-check=full --log-file=mem_leak.log ./main
3.使用gprof2dot
用于生成详细的函数调用图:使用valgrind的callgrind工具输出.out
文件,使用gprof2dot将.out文件(callgrind.out.24478后面的数字代表进程pid)转换成.dot
文件,使用dot将.dot文件转成可视化文件.svg
valgrind --tool=callgrind ./main
gprof2dot -f callgrind -n0 -e0 ./callgrind.out.24478 >callgrind.24478.dot
dot callgrind.24478.dot -Tsvg -o callgrind.24478.dot.svg
4. other
简单函数调用图生成
gcc main.c -o main -pg -Wall -g
# g++ main.cpp -o main -pg -Wall -g
gprof ./main | gprof2dot -n0 -e0 | dot -Tsvg -o output.svg
5. reference
详细的内容可查看如下官方文档
valgrind User Manual
valgrind_manual.pdf
gprof2dot github