zoukankan      html  css  js  c++  java
  • Centos Valgrind 的使用与安装

    第一步:

    获取Valgrind 包 可以先使用浏览器访问http://valgrind.org/downloads/查看当前版本

    wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2

    第二步:

    将下载的文件解压

    tar -jxvf valgrind-3.10.1.tar.bz2

    第三步:

    安装和配置
    ./autogen.sh
    ./configure
    make; make install

    注意:如果autogen执行错误,sudo yum -y install libtool*

    第四步:

      查看使用参数(valgrind --help )

    usage: valgrind [options] prog-and-args
      

    tool-selection option, with default in [ ]:
        --tool=<name>             use the Valgrind tool named <name> [memcheck]


      basic user options for all Valgrind tools, with defaults in [ ]:
        -h --help                 show this message
        --help-debug              show this message, plus debugging options
        --version                 show version
        -q --quiet                run silently; only print error msgs
        -v --verbose              be more verbose -- 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 the argv[] entries for children, rather
                                  than the exe name, to make a follow/no-follow decision
        --child-silent-after-fork=no|yes omit child output between fork & exec? [no]
        --vgdb=no|yes|full        activate gdbserver? [yes]
                                  full is slower but provides precise watchpoint/step
        --vgdb-error=<number>     invoke gdbserver after <number> errors [999999999]
                                  to get started quickly, use --vgdb-error=0
                                  and follow the on-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        track open file descriptors? [no]
        --time-stamp=no|yes       add timestamps 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  log messages to socket ipaddr:port


      user options for Valgrind tools that report errors:
        --xml=yes                 emit error 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  XML output to socket ipaddr:port
        --xml-user-comment=STR    copy STR verbatim 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      stop showing new errors if too many? [yes]
        --error-exitcode=<number> exit code to return if errors found [0=disable]
        --show-below-main=no|yes  continue stack traces below main() [no]
        --default-suppressions=yes|no
                                  load default suppressions [yes]
        --suppressions=<filename> suppress errors described in <filename>
        --gen-suppressions=no|yes|all    print suppressions for errors? [no]
        --db-attach=no|yes        start debugger when errors detected? [no]
                                  Note: deprecated feature
        --db-command=<command>    command to start debugger [/no/gdb/was/found/at/configure/time -nw %f %p]
        --input-fd=<number>       file descriptor for input [0=stdin]
        --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [no]
        --max-stackframe=<number> assume stack switch for SP changes larger
                                  than <number> bytes [2000000]
        --main-stacksize=<number> set size of main thread's stack (in bytes)
                                  [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 (in bytes). [16]


      uncommon user options for all Valgrind tools:
        --fullpath-after=         (with nothing after the '=')
                                  show full source paths in call stacks
        --fullpath-after=string   like --fullpath-after=, but only show the
                                  part of the path after 'string'.  Allows removal
                                  of path prefixes.  Use this flag multiple times
                                  to specify a set of prefixes to remove.
        --extra-debuginfo-path=path    absolute path to search for additional
                                  debug symbols, in addition to existing default
                                  well known search paths.
        --debuginfo-server=ipaddr:port    also query this server
                                  (valgrind-di-server) for debug symbols
        --allow-mismatched-debuginfo=no|yes  [no]
                                  for the above two flags only, accept debuginfo
                                  objects that don't "match" the main object
        --smc-check=none|stack|all|all-non-file [stack]
                                  checks for self-modifying code: none, only for
                                  code found in stacks, for all code, or for all
                                  code except that from file-backed mappings
        --read-inline-info=yes|no read debug info about inlined function calls
                                  and use it to do better stack traces.  [yes]
                                  on Linux/Android for Memcheck/Helgrind/DRD
                                  only.  [no] for all other tools and platforms.
        --read-var-info=yes|no    read debug info on stack and global variables
                                  and use it to print 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   schedule threads 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     avoid mapping memory below 0xPP [guessed]
        --show-emwarns=no|yes     show warnings about emulation limits? [no]
        --require-text-symbol=:sonamepattern:symbolpattern    abort run if the
                                  stated shared object doesn't have the stated
                                  text symbol.  Patterns can contain ? and *.
        --soname-synonyms=syn1=pattern1,syn2=pattern2,... synonym soname
                  specify patterns for function wrapping or replacement.
                  To use a non-libc malloc library that is
                      in the main exe:  --soname-synonyms=somalloc=NONE
                      in libxyzzy.so:   --soname-synonyms=somalloc=libxyzzy.so
        --sigill-diagnostics=yes|no  warn about illegal instructions? [yes]
        --unw-stack-scan-thresh=<number>   Enable stack-scan unwind if fewer
                      than <number> good frames found  [0, meaning "disabled"]
                      NOTE: stack scanning is only available 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  self explanatory [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]

    第五步测试程序:注意:需要当前用户是否有执行权限

    valgrind --tool=memcheck --leak-check=full --log-file=log  ./main 使用对用的参数对已经编译好的C程序进行测试

    第六步:

    分析结果上面的配置会在当前目录生成一个log的日志文件 查看日志文件就行了

    ==24809== Memcheck, a memory error detector
    ==24809== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
    ==24809== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
    ==24809== Command: ./main
    ==24809== Parent PID: 7060
    ==24809==
    ==24809==
    ==24809== HEAP SUMMARY:
    ==24809==     in use at exit: 0 bytes in 0 blocks
    ==24809==   total heap usage: 29 allocs, 29 frees, 1,193 bytes allocated
    ==24809==
    ==24809== All heap blocks were freed -- no leaks are possible
    ==24809==
    ==24809== For counts of detected and suppressed errors, rerun with: -v
    ==24809== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)

  • 相关阅读:
    bzoj3167 [Heoi2013]Sao
    51Nod1220 约数之和
    THUSC2017 游记
    基于线性代数的一般图匹配
    COGS2608 [河南省队2016]无根树
    CTSC2017 & APIO2017 游记
    cef GeneralUsage
    CefApp和CefClient的作用
    cef源码分析之cefsimple
    【chromium】cef是如何进行版本控制的?
  • 原文地址:https://www.cnblogs.com/chriszsy/p/13216109.html
Copyright © 2011-2022 走看看