valgrind:linux下c/c++内存检测工具

Valgrind是x86架构Linux上的多重用途代码剖析和内存调试工具。但它的主要功能还是对内存的调试,默认工具也是启动memcheck。用户可以在它的环境中运行程序来监视内存的使用情况,比如C语言中的malloc和free或者C++中的new和delete。

gdb主要用于调试,valgrind 则注重于检测内存,典型用法如下:

valgrind --tool=memcheck --leak-check=yes ./myprogram

Valgrind主要检测如下内存问题:

(1)使用未初始化的内存。

(2)使用已经释放了的内存。

(3)使用超过malloc分配的内存空间。

(4)对堆栈的非法访问。

(5)内存泄漏。

(6)malloc/free/new/delete非匹配的使用内存申请和释放函数。

(7)使用memcpy等函数时源地址和目的地址的重叠错误。

其使用方法如下:

// valgrind 参数 程序及选项
valgrind [options] prog-and-args

1.Valgrind常用选项

表3-1~表3-4列出了Valgrind工具的常用选项。如表3-1所示为Valgrind工具所有经常使用的公共选项说明。

表3-1 Valgrind公共选项

    

    

   

--tool=<name>

使用名为<name>Valgrind工具

[memcheck]

--version

显示版本信息

 

-q --quiet

只打印错误信息

 

-v --verbose

显示详细信息

 

--trace-children=no|yes

跟踪子进程

[no]

--track-fds=no|yes

跟踪文件描述符

[no]

--time-stamp=no|yes

添加时间戳到日志文件

[no]

--log-fd=<number>

日志信息写入到文件描述符

[2=stderr]

--log-file=<file>

日志信息写入到文件

 

--log-file-exactly=<file>

日志信息写入到外部文件

<file>

表3-2 Valgrind选项

    

    

  设置

--run-libc-freeres=no|yes

在退出时清除glibc内存

[yes]

--sim-hints=hint1,hint2,...

lax-ioctls, enable-outer

[none]

--show-emwarns=no|yes

显示仿真限制的警告

[no]

--smc-check=none|stack|all

自修改代码检查、不检查、仅检查栈中的代码

[stack]

--kernel-variant=variant1,...

处理非标准内核变量

[none]

表3-3 报告错误工具选项

    

    

   

--xml=yes

所有输出为XML

 

--xml-user-comment=STR

逐字拷贝STR到XML

 

--demangle=no|yes

是否自动解除C++名称修饰

[yes]

--num-callers=<number>

显示栈跟踪器中的number号调用者

[12]

--error-limit=no|yes

如果错误太多停止显示新错误

[yes]

--error-exitcode=<number>

如果发现错误返回exit代码

[0=disable]

--show-below-main=no|yes

在main后继续跟踪栈

[no]

--suppressions=<filename>

抑制文件中的错误描述

 

--gen-suppressions=no|yes|all

打印错误的抑制信息

[no]

--db-attach=no|yes

发现错误时调试

[no]

--db-command=<command>

开始调试命令

[gdb -nw %f %p]

--input-fd=<number>

用于输入的文件描述符

[0=stdin]

--max-stackframe=<number>

假设因sp变化大于number字节而引起堆转变

[2000000]

表3-4 Memcheck工具

    

    

  设置

--leak-check=no|summary|full

在exit处查找内存泄漏

[summary]

--leak-resolution=low|med|high

在内存泄漏检查出多少字节

[low]

--show-reachable=no|yes

显示泄露检查中的块

[no]

--undef-value-errors=no|yes

检查未定义变量错误

[yes]

--partial-loads-ok=no|yes

请参阅手册

[no]

--freelist-vol=<number>

释放块队列的序号

[5000000]

--workaround-gcc296-bugs=no|yes

自解释

[no]

--alignment=<number>

设置分配的最小对齐大小

[8]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值