Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4495622
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: LINUX

2013-08-16 13:39:42

        Valgrind是Linux下一套开源的仿真调试工具集合,提供程序调试、内存检测、性能分析等功能,更多详细信息请参看官网
一、体系结构
        Valgrind由内核(core)以及基于内核的其它调试工具组成,内核类似于一个框架(framework),其模拟了一个CPU环境,并提供服务给其它工具,而其它工具则类似于插件(plug-in),利用内核提供的服务完成各种特定的调试任务。Valgrind体系结构如下图所示:
        
                                            图1 Valgrind体系结构
        从上图可以看出Valgrind包含一系列工具集,具体如下:
        Memcheck:主要用来检测程序中内存的使用问题,比如:内存泄露、非法内存访问、未初始化变量使用、重复释放内存,非法指针等。
        Callgrind:主要用来检测程序中代码的运行时间和函数调用过程,以及分析程序性能。
        Cachegrind:主要用来检查程序中缓存使用问题,分析CPU的cache命中率和丢失率,用于进行代码优化。
        Helgrind:主要用来检查多线程程序的竞态条件,包括死锁、竞争等。
        Massif:主要用来检查程序中堆栈使用出现的问题,堆栈分析器,统计程序中堆栈使用信息。
        Extension:可以利用core提供的功能,自己编写特定的内存调试工具。
        在这些工具集使用最广泛的是Memcheck,它是一个重量级的内存检查器,能够发现开发中的绝大多数内存错误使用情况,其次,是Callgrind,其是一款类似于gprof的性能检测工具,在后面系列文章会专门介绍这两款工具。

二、安装部署
         如果有root权限,土鳖安装方式如下:
        (1)从官网下载valgrind安装包。
        (2)解压安装包。
        (3)cd到安装目录,运行./configure。
        (4)#make
        (5)#make install
        (6)#valgrind ls -l 测试valgrind是否以U经安装成功了。
        优雅安装方式如下:
        #yum install valgrind
        一路yes即可。
        如果没有root权限,则在第3步时,可以用--prefix指定安装的目录:
        #./configure --prefix=/home/dev/
        
三、基本语法
1、语法格式
        valgrind [options] prog-and-args [options] 
2、选项信息
        常用选项适用于所有Valgrind工具,具体信息如下:
        (1)--tool=name [default=memcheck]
        --tool参数指明使用valgrind集合中的哪款工具,name为要使用的工具名称,默认是--tool=memcheck。
        (2)h --help显示帮助信息
        (3)--version 显示valgrind内核版本信息,每个工具都有各自版本号
        (4)q --quiet 安静点地运行,只打印错误信息
        (5)v --verbose 更详细的信息,增加错误数统计
        (6)--trace-children=no|yes 跟踪子线程 [no]
        (7)--trace-fds=no|yes 跟踪打开的文件描述符 [no]
        (8)--time-stamp=no|yes 增加时间戳到LOG信息 [no]
        (9)--log-fd=number 输出LOG到描述符文件 [2=sterr]
        (10)--log-file=file 将输出的信息写入到filename.PID文件里,PID是运行程序的进程ID号
        (11)--log-file-exactly=file 输出LOG信息到file
        (12)--log-file-qualifier=VAR 取得环境变量的值来作为输出信息的文件名 [none]
        (13)--log-socket=ipaddr:port 输出LOG到socket,ipaddr:port
3、LOG信息
        (1)--xml=yes 将信息以xml格式输出,只能用于Memcheck
        (2)--num-callers=number show number callers in stack traces [12]
        (3)--error-limit=no|yes 如果太多错误,则停止显示新错误 [yes]
        (4)--error-exitcode=number 如果发现错误,则返回错误代码 [0=disable]
        (5)--db-attach=no|yes 当出现错误,Valgrind会自动启动调试器gdb [no]
        (6)--db-command=command 启动调试器的命令行选项 [gdb -nw %f %p]
4、Memcheck专用选项
        (1)--leak-check=no|summary|yes|full [default:summary]
        在退出时检查是否有泄漏,summary检测有多少次泄漏,yes或者full会检测每次泄漏的详细信息。
        (2)--leak-resolution=low|med|high 检测有多少bt合并类型的内存泄漏 [low]
        (3)--show-reachable=yes|no [default:no]
        通过设定参数为yes来显示reachable类型的内存泄漏信息。
        



阅读(2702) | 评论(1) | 转发(0) |
1

上一篇:lsof

下一篇:Valgrind之Memcheck

给主人留下些什么吧!~~

scq2099yt2013-08-16 13:39:51

文明上网,理性发言...