?
首先对源文件进行编译:
- Preparing your program
Compile your program with -g to include debugging information so that Memcheck's error messages include exact line numbers.
-O0 a good idea if you can tolerate the slowdown
-O1 line number in error message can be inaccurate although generally speaking running Memcheck on code compiled at -O1 works fairly well and the speed improvement compared to running -O0 is quite significant.
-O2 not recommended
- Running your program under Memcheck
./myprog arg1 arg2
valgrind --leak-check=yes ./myprog arg1 arg2
your program will run much slower(eg. 20 to 30 times) than normal and use a lot more memory.
?
然后使用valgrind:
用法: valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具
常用选项
- --tool=[default: memcheck]
--tool=memcheck:要求用 memcheck这个工具对程序进行分析
- --log-file=filename
将输出的信息写入到filename.PID 的文件里,PID是运行程序的进行ID
- --log-file-exactly=filename
指定就输出到 filename文件
- --log-socket=IP:PORT
把输出信息发送到网络中指定的IP:PORT 去
- --leak-ckeck=yes
要求对leak给出详细信息
- --leak-check=full
完全检查内存泄漏
- --xml=[default: no]
将信息以xml格式输出,只有 memcheck可用
- --gen-suppressions=[default: no]
如果为yes, valgrind会在每发现一个错误便停下让用户做选择是继续还是退出
- --leak-check=[default: summary]
Leak是指,存在一块没有被引用的内存空间,或没有被释放的内存空间,如 summary,只反馈一些总结信息,告诉你有多少个malloc ,多少个free 等;如果是full 将输出所有的leaks,也就是定位到某一个malloc/free 。
- --show-reachable=[default: no]
如果为 no,只输出没有引用的内存leaks,或指向 malloc返回的内存块中部某处的leaks
- --undef-value-errors=[default: yes]
如果为 yes,memcheck将对无定义值错进行检查
一般我们使用如下命令:
valgrind?--log-file-exactly=/path/1.txt --leak-check=full?--show-reachable=yes prog-and-args;
?
?