valgrind之旅-简单安装使用

1. 简介

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。名字取自北欧神话中英灵殿的入口。Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。

Valgrind遵守GNU通用公共许可证条款,是一款自由软件。支持x86、x86-64以及PowerPC上的Linux。除此之外,还有一些其它非正式支持的类Unix平台(如FreeBSD、NetBSD以及Mac OS X)。

 

2. 下载安装

下载地址:http://www.valgrind.org/

得到valgrind-3.10.1.tar.bz2 包

3. 安装准备

需要安装gcc编译器。

PS:蛤蟆这里使用的是Redhat 7.0操作系统。

4. 安装

 

解压:tar –xvf valgrind-3.10.1.tar.bz2

#cd valgrind-3.10.1

#./configure

出现如下:

 

        Maximum build arch: amd64

        Primary build arch: amd64

      Secondary build arch:

                   Build OS: linux

      Primary build target: AMD64_LINUX

    Secondary build target:

          Platform variant: vanilla

     Primary -DVGPV string: -DVGPV_amd64_linux_vanilla=1

        Default supp files: exp-sgcheck.supp xfree-3.supp xfree-4.suppglibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp

完毕然后执行如下,进行编译和安装。

#make && make install

 

5. 简单实用
# valgrind --help

usage: valgrind [options] prog-and-args




  tool-selectionoption, with default in [ ]:

   --tool=<name>            use the Valgrind tool named <name> [memcheck]




 basic user options for all Valgrind tools, with defaults in [ ]:

   -h --help                 showthis message

   --help-debug              show this message, plus debuggingoptions

   --version                 showversion

   -q --quiet                runsilently; only print error msgs

   -v --verbose              be moreverbose -- show misc extra info

   --trace-children=no|yes  Valgrind-ise child processes (follow execve)? [no]

   --trace-children-skip=patt1,patt2,...   specifies a list of executables

                              that--trace-children=yes should not trace into

   --trace-children-skip-by-arg=patt1,patt2,...   same as --trace-children-skip=

                              but check theargv[] entries for children, rather

                              than the exename, to make a follow/no-follow decision

   --child-silent-after-fork=no|yes omit child output between fork &exec? [no]

   --vgdb=no|yes|full        activategdbserver? [yes]

                              full is slowerbut provides precise watchpoint/step

   --vgdb-error=<number>    invoke gdbserver after <number> errors [999999999]

                              to get startedquickly, use --vgdb-error=0

                              and follow theon-screen directions

   --vgdb-stop-at=event1,event2,... invoke gdbserver for given events[none]

         where event is one of:

          startup exit valgrindabexit all none

   --track-fds=no|yes        trackopen file descriptors? [no]

   --time-stamp=no|yes       addtimestamps to log messages? [no]

   --log-fd=<number>        log messages to file descriptor [2=stderr]

   --log-file=<file>        log messages to <file>

   --log-socket=ipaddr:port  logmessages to socket ipaddr:port




 user options for Valgrind tools that report errors:

   --xml=yes                 emiterror output in XML (some tools only)

   --xml-fd=<number>        XML output to file descriptor

   --xml-file=<file>        XML output to <file>

   --xml-socket=ipaddr:port  XMLoutput to socket ipaddr:port

   --xml-user-comment=STR    copy STRverbatim into XML output

    --demangle=no|yes         automatically demangle C++ names?[yes]

   --num-callers=<number>   show <number> callers in stack traces [12]

   --error-limit=no|yes      stopshowing new errors if too many? [yes]

   --error-exitcode=<number> exit code to return if errors found[0=disable]

   --show-below-main=no|yes  continuestack traces below main() [no]

   --default-suppressions=yes|no

                              load defaultsuppressions [yes]

   --suppressions=<filename> suppress errors described in<filename>

   --gen-suppressions=no|yes|all   print suppressions for errors? [no]

   --db-attach=no|yes        startdebugger when errors detected? [no]

                              Note: deprecatedfeature

   --db-command=<command>   command to start debugger [/usr/bin/gdb -nw %f %p]

   --input-fd=<number>      file descriptor for input [0=stdin]

   --dsymutil=no|yes         rundsymutil on Mac OS X when helpful? [no]

   --max-stackframe=<number> assume stack switch for SP changeslarger

                              than<number> bytes [2000000]

   --main-stacksize=<number> set size of main thread's stack (inbytes)

                              [min(max(current'ulimit' value,1MB),16MB)]




 user options for Valgrind tools that replace malloc:

   --alignment=<number>     set minimum alignment of heap allocations [16]

   --redzone-size=<number>  set minimum size of redzones added before/after

                              heap blocks (inbytes). [16]




 uncommon user options for all Valgrind tools:

   --fullpath-after=         (withnothing after the '=')

                              show full sourcepaths in call stacks

   --fullpath-after=string   like--fullpath-after=, but only show the

                              part of the path after 'string'.  Allows removal

                              of pathprefixes.  Use this flag multiple times

                              to specify a setof prefixes to remove.

   --extra-debuginfo-path=path   absolute path to search for additional

                              debug symbols, inaddition to existing default

                              well known searchpaths.

   --debuginfo-server=ipaddr:port   also query this server

                             (valgrind-di-server) for debug symbols

   --allow-mismatched-debuginfo=no|yes [no]

                              for the above twoflags only, accept debuginfo

                              objects thatdon't "match" the main object

   --smc-check=none|stack|all|all-non-file [stack]

                              checks forself-modifying code: none, only for

                              code found instacks, for all code, or for all

                              code except thatfrom file-backed mappings

   --read-inline-info=yes|no read debug info about inlined function calls

                              and use it to dobetter stack traces.  [yes]

                              on Linux/Androidfor Memcheck/Helgrind/DRD

                              only.  [no] for all other tools and platforms.

   --read-var-info=yes|no    readdebug info on stack and global variables

                              and use it toprint better error messages in

                              tools that make use of it (Memcheck, Helgrind,

                              DRD) [no]

   --vgdb-poll=<number>     gdbserver poll max every <number> basic blocks [5000]

   --vgdb-shadow-registers=no|yes  let gdb see the shadow registers [no]

   --vgdb-prefix=<prefix>   prefix for vgdb FIFOs [/tmp/vgdb-pipe]

   --run-libc-freeres=no|yes free up glibc memory at exit on Linux? [yes]

   --sim-hints=hint1,hint2,... activate unusual sim behaviours [none]

        where hint is one of:

          lax-ioctls fuse-compatible enable-outer

          no-inner-prefix no-nptl-pthread-stackcache none

   --fair-sched=no|yes|try   schedulethreads fairly on multicore systems [no]

   --kernel-variant=variant1,variant2,...

        handle non-standard kernel variants [none]

        where variant is one of:

          bproc android-no-hw-tls

          android-gpu-sgx5xx android-gpu-adreno3xx none

   --merge-recursive-frames=<number> merge frames between identical

          program counters in max <number> frames) [0]

   --num-transtab-sectors=<number> size of translated code cache [16]

          more sectors may increase performance, but use more memory.

   --aspace-minaddr=0xPP     avoidmapping memory below 0xPP [guessed]

   --show-emwarns=no|yes     show warnings about emulation limits? [no]

   --require-text-symbol=:sonamepattern:symbolpattern    abort run if the

                              stated sharedobject doesn't have the stated

                              text symbol.  Patterns can contain ? and *.

   --soname-synonyms=syn1=pattern1,syn2=pattern2,... synonym soname

              specify patterns for functionwrapping or replacement.

              To use a non-libc malloc librarythat is

                  in the main exe:  --soname-synonyms=somalloc=NONE

                  in libxyzzy.so:   --soname-synonyms=somalloc=libxyzzy.so

   --sigill-diagnostics=yes|no  warnabout illegal instructions? [yes]

   --unw-stack-scan-thresh=<number>  Enable stack-scan unwind if fewer

                  than <number> goodframes found  [0, meaning"disabled"]

                  NOTE: stack scanning is onlyavailable on arm-linux.

   --unw-stack-scan-frames=<number>  Max number of frames that can be

                  recovered by stack scanning[5]




 user options for Memcheck:

   --leak-check=no|summary|full    search for memory leaks at exit? [summary]

   --leak-resolution=low|med|high  differentiation of leak stack traces [high]

   --show-leak-kinds=kind1,kind2,.. which leak kinds to show?

                                           [definite,possible]

   --errors-for-leak-kinds=kind1,kind2,.. which leak kinds are errors?

                                           [definite,possible]

       where kind is one of:

         definite indirect possible reachable all none

   --leak-check-heuristics=heur1,heur2,... which heuristics to use for

       improving leak search false positive [none]

       where heur is one of:

         stdstring length64 newarray multipleinheritance all none

   --show-reachable=yes            same as --show-leak-kinds=all

   --show-reachable=no --show-possibly-lost=yes

                                     same as--show-leak-kinds=definite,possible

   --show-reachable=no --show-possibly-lost=no

                                     same as--show-leak-kinds=definite

   --undef-value-errors=no|yes     check for undefined value errors [yes]

   --track-origins=no|yes          show origins of undefined values? [no]

   --partial-loads-ok=no|yes       too hard to explain here; see manual [no]

   --freelist-vol=<number>         volume of freed blocks queue    [20000000]

   --freelist-big-blocks=<number>  releases first blocks with size>= [1000000]

   --workaround-gcc296-bugs=no|yes  selfexplanatory [no]

   --ignore-ranges=0xPP-0xQQ[,0xRR-0xSS]  assume given addresses are OK

   --malloc-fill=<hexnumber>       fill malloc'd areas with given value

   --free-fill=<hexnumber>         fill free'd areas with given value

   --keep-stacktraces=alloc|free|alloc-and-free|alloc-then-free|none

       stack trace(s) to keep for malloc'd/free'd areas       [alloc-then-free]

   --show-mismatched-frees=no|yes  show frees that don't match the allocator? [yes]




 Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc




 Memcheck is Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward etal.

 Valgrind is Copyright (C) 2000-2013, and GNU GPL'd, by Julian Seward etal.

 LibVEX is Copyright (C) 2004-2013, and GNU GPL'd, by OpenWorks LLP etal.




  Bugreports, feedback, admiration, abuse, etc, to: www.valgrind.org.

 

到此,安装完毕~