valgrind工具

Valgrind是一个用于检查程序内存泄漏、段错误等bug的工具。它包含的有:内存检测、缓存检测、代码覆盖、性能测试等功能,主要在X86和PPC的Linux工作。
1.检查内存错误:
例如我们原来有一个程序sec_infod,这是一个用gcc –g参数编译的程序,运行它需要:
#./a.out
如果我们想用valgrind的内存检测工具,我们就要用如下方法调用:
#valgrind --leak-check=full --show-reachable=yes --trace-children= yes   ./a.out (2>logfile加上会好些,程序在执行期间stderr会有一些输出。提示比较多)

其中--leak-check=full 指的是完全检查内存泄漏,--show-reachable=yes是显示内存泄漏的地点,--trace-children=yes是跟入子进程。

如果您的程序是会正常退出的程序,那么当程序退出的时候valgrind自然会输出内存泄漏的信息。如果您的程序是个守护进程,那么也不要紧,我们只要在 别的终端下杀死memcheck进程(因为valgrind默认使用memcheck工具,就是默认参数—tools=memcheck):
#killall memcheck
这样我们的程序(./a.out)就被kill了

2,检查代码覆盖和性能瓶颈:
我们调用valgrind的工具执行程序:
#valgrind --tool=callgrind ./sec_infod

会在当前路径下生成callgrind.out.pid(当前生产的是callgrind.out.19689),如果我们想结束程序,可以:
#killall callgrind
然后我们看一下结果:
#callgrind_annotate --auto=yes callgrind.out.19689   >log
#vim log

3.Valgrind使用参数
          --log-fd=N 默认情况下,输出信息是到标准错误stderr,也可以通过—log-fd=8,输出到描述符为8的文件
          --log-file=filename将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID。可以通过--log- file exactly=filename指定就输出到filename文件。
          --log-file-qualifier=<VAR>,取得环境变量的值来做为输出信息的文件名。如—log-file- qualifier=$FILENAME。
          --log-socket=IP:PORT 也可以把输出信息发送到网络中指定的IP:PORT去
          --error-limit=no 对错误报告的个数据进行限制,默认情况不做限制
          --tool=<toolname> [default: memcheck]
--tool=memcheck:要求用memcheck这个工具对程序进行分析
     --leak-ckeck=yes 要求对leak给出详细信息
     --trace-children=<yes|no> [default: no]跟踪到子进程里去,默认请况不跟踪
     --xml=<yes|no> [default: no]将信息以xml格式输出,只有memcheck可用
     --gen-suppressions=<yes|no|all> [default: no]如果为yes,valgrind会在每发现一个错误便停下让用户做选择是继续还是退出

更多选项请参看: http://www.valgrind.org/docs/manual/manual-core.html可以把一些默认选项编辑在 ~/.valgrindrc文件里。

这里使用valgrind的memcheck和callgrind两个工具的用法,其实valgrind还有几个工具:“cachegrind”,用于检查缓存使用的;“helgrind”用于检测多线程竞争资源的,等等。

转载于:https://my.oschina.net/u/3485339/blog/900304

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值