开源工具之valgrind

 

首先对源文件进行编译:
  1. 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
  2. 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工具

常用选项

  1. --tool=[default: memcheck]
    --tool=memcheck:要求用 memcheck这个工具对程序进行分析
  2. --log-file=filename
    将输出的信息写入到filename.PID 的文件里,PID是运行程序的进行ID
  3. --log-file-exactly=filename
    指定就输出到 filename文件
  4. --log-socket=IP:PORT
    把输出信息发送到网络中指定的IP:PORT 去
  5. --leak-ckeck=yes
    要求对leak给出详细信息
  6. --leak-check=full
    完全检查内存泄漏
  7. --xml=[default: no]
    将信息以xml格式输出,只有 memcheck可用
  8. --gen-suppressions=[default: no]
    如果为yes, valgrind会在每发现一个错误便停下让用户做选择是继续还是退出
  9. --leak-check=[default: summary]
    Leak是指,存在一块没有被引用的内存空间,或没有被释放的内存空间,如 summary,只反馈一些总结信息,告诉你有多少个malloc ,多少个free 等;如果是full 将输出所有的leaks,也就是定位到某一个malloc/free 。
  10. --show-reachable=[default: no]
    如果为 no,只输出没有引用的内存leaks,或指向 malloc返回的内存块中部某处的leaks
  11. --undef-value-errors=[default: yes]
    如果为 yes,memcheck将对无定义值错进行检查

一般我们使用如下命令:
valgrind --log-file-exactly=/path/1.txt --leak-check=full --show-reachable=yes prog-and-args;

 

 

 

你可能感兴趣的:(C++,linux,测试,valgrind,开源工具)