linux调试Valgrind--内存泄漏检测工具

介绍
Valgrind是一套调试和分析工具。它的一个被广泛使用的默认工具——‘Memcheck’——可以拦截malloc(),new(),free()和delete()调用。换句话说,它在检测下面这些问题非常有用:

内存泄露
重释放
访问越界
使用未初始化的内存
使用已经被释放的内存等。
它直接通过可执行文件运行。

Valgrind也有一些缺点,因为它增加了内存占用,会减慢你的程序。它有时会造成误报和漏报。它不能检测出静态分配的数组的访问越界问题

Memcheck。这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。
Callgrind。它主要用来检查程序中函数调用过程中出现的问题。
Cachegrind。它主要用来检查程序中缓存使用出现的问题。
Helgrind。它主要用来检查多线程程序中出现的竞争问题。
Massif。它主要用来检查程序中堆栈使用中出现的问题。
Extension。可以利用core提供的功能,自己编写特定的内存调试

安装
命令行安装
sudo apt-get install valgrind

源码安装
wget http://www.valgrind.org/downloads/valgrind-3.14.0.tar.bz2
tar -jxvf valgrind-3.14.0.tar.bz2
cd valgrind-3.14.0
./configure --prefix=/home/user1/valgrind
make
make install

配置
vi ~/.bashrc
添加
export PATH=$PATH:~/valgrind/bin/

source ~/.bashrc

使用
用法: valgrind [options]prog-and-args [options]:常用选项,适用于所有Valgrind工具

  1. -tool=最常用的选项。运行valgrind中名为toolname的工具。默认memcheck。
  2. h –help显示帮助信息。
  3. -version显示valgrind内核的版本,每个工具都有各自的版本。
  4. q –quiet安静地运行,只打印错误信息。
  5. v –verbose更详细的信息,增加错误数统计。
  6. -trace-children=no|yes跟踪子线程? [no]
  7. -track-fds=no|yes跟踪打开的文件描述?[no]
  8. -time-stamp=no|yes增加时间戳到LOG信息? [no]
  9. -log-fd=输出LOG到描述符文件 [2=stderr]
  10. -log-file=将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
  11. -log-file-exactly=输出LOG信息到 file
  12. -log-file-qualifier=取得环境变量的值来做为输出信息的文件名。 [none]
  13. -log-socket=ipaddr:port输出LOG到socket ,ipaddr:port

LOG信息输出

  1. -xml=yes将信息以xml格式输出,只有memcheck可用
  2. -num-callers= show callersin stack traces [12]
  3. -error-limit=no|yes如果太多错误,则停止显示新错误? [yes]
  4. -error-exitcode=如果发现错误则返回错误代码 [0=disable]
  5. -db-attach=no|yes当出现错误,valgrind会自动启动调试器gdb。[no]
  6. -db-command=启动调试器的命令行选项[gdb -nw %f %p]

适用于Memcheck工具的相关选项:

  1. -leak-check=no|summary|full要求对leak给出详细信息? [summary]
  2. -leak-resolution=low|med|high how much bt merging in leakcheck [low]

-show-reachable=no|yesshow reachable blocks in leak check? [no]

直接输出
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --run-libc-freeres=yes ./main
在这里插入图片描述

输出到日志
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --run-libc-freeres=yes --log-file=./valgrind_report.log ./main $@
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值