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.
到此,安装完毕~