OS Manuals

/usr/bin/valgrind

Tool to help find memory-management problems in programs

From valgrind 3.28.0-r0 (os), captured 2026-11-05 by running valgrind --help (exit 0). permalink

usage: valgrind [options] prog-and-args

  tool-selection option, with default in [ ]:
    --tool=<name>             use the Valgrind tool named <name> [memcheck]
                              available tools are:
                              memcheck cachegrind callgrind helgrind drd
                              massif dhat lackey none exp-bbv

  basic user options for all Valgrind tools, with defaults in [ ]:
    -h --help                 show this message
    --help-debug              show this message, plus debugging options
    --help-dyn-options        show the dynamically changeable 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 abexit valgrindabexit all none
    --track-fds=no|yes|all|bad track open file descriptors? [no]
                              all also reports on open inherited file
                              descriptors at exit (e.g. stdin/out/err)
                              bad only reports on file descriptor usage
                              errors and doesn't list open file descriptors
                              at exit
    --modify-fds=no|yes|high  modify newly 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
    --enable-debuginfod=no|yes query debuginfod servers for missing
                              debuginfo [yes]

  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 decorated names? [yes]
                              supported languages: C++, D, Rust, Java, Ada
    --num-callers=<number>    show <number> callers in stack traces [12]
    --error-limit=no|yes      stop showing new errors if too many? [yes]
    --exit-on-first-error=no|yes exit code on the first error found? [no]
    --error-exitcode=<number> exit code to return if errors found [0=disable]
    --error-markers=<begin>,<end> add lines with begin/end markers before/after
                              each error output in plain text mode [none]
    --show-error-list=no|yes|all  show detected errors list and
                              suppression counts at exit [no].
                              all means to also print suppressed errors.
    -s                        same as --show-error-list=yes
    --keep-debuginfo=no|yes   Keep symbols etc for unloaded code [no]
                              This allows saved stack traces (e.g. memory leaks)
                              to include file/line info for code that has been
                              dlclose'd (or similar)
    --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]
    --input-fd=<number>       file descriptor for input [0=stdin]
    --dsymutil=no|yes         run dsymutil on Mac OS X when helpful? [yes]
    --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]
    --xtree-memory=none|allocs|full   profile heap memory in an xtree [none]
                              and produces a report at the end of the execution
                              none: no profiling, allocs: current allocated
                              size/blocks, full: profile current and cumulative
                              allocated size/blocks and freed size/blocks.
    --xtree-memory-file=<file>   xtree memory report file [xtmemory.kcg.%p]
    --realloc-zero-bytes-frees=yes|no [yes on Linux glibc, no otherwise]
                              should calls to realloc with a size of 0
                              free memory and return NULL or
                              allocate/resize and return non-NULL

  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 [all-non-file]
                              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/Solaris for the tools
                              Memcheck/Massif/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]
    --run-cxx-freeres=no|yes  free up libstdc++ memory at exit on Linux
                              and Solaris? [yes]
    --sim-hints=hint1,hint2,...  activate unusual sim behaviours [none]
         where hint is one of:
           lax-ioctls lax-doors fuse-compatible enable-outer
           no-inner-prefix no-nptl-pthread-stackcache fallback-llsc none
    --scheduling-quantum=<number>  thread-scheduling timeslice in number of
           basic blocks [100000]
    --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 [32]
           more sectors may increase performance, but use more memory.
    --avg-transtab-entry-size=<number> avg size in bytes of a translated
           basic block [0, meaning use tool provided default]
    --aspace-minaddr=0xPP     avoid mapping memory below 0xPP [guessed]
    --valgrind-stacksize=<number> size of valgrind (host) thread's stack
                               (in bytes) [1048576]
    --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]
    --resync-filter=no|yes|verbose [yes on MacOS, no on other OSes]
              attempt to avoid expensive address-space-resync operations
    --max-threads=<number>     maximum number of threads that valgrind can
                               handle [500]
    --max-guard-pages=<number> maximum number of madvise guard pages that
                               valgrind can handle [8000]

  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 [all]
        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
    --xtree-leak=no|yes              output leak result in xtree format? [no]
    --xtree-leak-file=<file>         xtree leak report file [xtleak.kcg.%p]
    --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 [yes]
    --expensive-definedness-checks=no|auto|yes
                                     Use extra-precise definedness tracking [auto]
    --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].  Deprecated.
                                     Use --ignore-range-below-sp instead.
    --ignore-ranges=0xPP-0xQQ[,0xRR-0xSS]   assume given addresses are OK
    --ignore-range-below-sp=<number>-<number>  do not report errors for
                                     accesses at the given offsets below SP
    --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-and-free]
    --show-mismatched-frees=no|yes   show frees that don't match the allocator? [yes]
    --show-realloc-size-zero=no|yes  show reallocs with a size of zero? [yes]

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

  Memcheck is Copyright (C) 2002-2026, and GNU GPL'd, by Julian Seward et al.
  Valgrind is Copyright (C) 2000-2026, and GNU GPL'd, by Julian Seward et al.
  LibVEX is Copyright (C) 2004-2026, and GNU GPL'd, by OpenWorks LLP et al.

  Bug reports, feedback, admiration, abuse, etc, to: www.valgrind.org.
Options (81)
OptionDescriptionSource
--tool nameuse the Valgrind tool named <name> [memcheck] available tools are: memcheck cachegrind callgrind helgrind drd massif dhat lackey none exp-bbvhelp
-h --helpshow this messagehelp
--help-debugshow this message, plus debugging optionshelp
--help-dyn-optionsshow the dynamically changeable optionshelp
--versionshow versionhelp
-q --quietrun silently;help
-v --verbosebe more verbose -- show misc extra infohelp
--trace-children no|yesValgrind-ise child processes (follow execve)? [no]help
--trace-children-skip patt1specifies a list of executables that --trace-children=yes should not trace intohelp
--trace-children-skip-by-arg patt1same as --trace-children-skip= but check the argv[] entries for children, rather than the exe name, to make a follow/no-follow decisionhelp
--vgdb no|yes|fullactivate gdbserver? [yes] full is slower but provides precise watchpoint/stephelp
--vgdb-error numberinvoke gdbserver after <number> errors [999999999] to get started quickly, use --vgdb-error=0 and follow the on-screen directionshelp
--modify-fds no|yes|highmodify newly open file descriptors? [no]help
--time-stamp no|yesadd timestamps to log messages? [no]help
--log-fd numberlog messages to file descriptor [2=stderr]help
--log-file filelog messages to <file>help
--log-socket ipaddr:portlog messages to socket ipaddr:porthelp
--xml yesemit error output in XML (some tools only)help
--xml-fd numberXML output to file descriptorhelp
--xml-file fileXML output to <file>help
--xml-socket ipaddr:portXML output to socket ipaddr:porthelp
--xml-user-comment STRcopy STR verbatim into XML outputhelp
--demangle no|yesautomatically demangle decorated names? [yes] supported languages: C++, D, Rust, Java, Adahelp
--num-callers numbershow <number> callers in stack traces [12]help
--error-limit no|yesstop showing new errors if too many? [yes]help
--show-error-list no|yes|allshow detected errors list and suppression counts at exit [no].help
-ssame as --show-error-list=yeshelp
--keep-debuginfo no|yesKeep symbols etc for unloaded code [no] This allows saved stack traces (e.g. memory leaks) to include file/line info for code that has been dlclose'd (or similar)help
--show-below-main no|yescontinue stack traces below main() [no]help
--default-suppressions yes|noload default suppressions [yes]help
--gen-suppressions no|yes|allprint suppressions for errors? [no]help
--input-fd numberfile descriptor for input [0=stdin]help
--dsymutil no|yesrun dsymutil on Mac OS X when helpful? [yes]help
--alignment numberset minimum alignment of heap allocations [16]help
--redzone-size numberset minimum size of redzones added before/after heap blocks (in bytes).help
--xtree-memory none|allocs|fullprofile heap memory in an xtree [none] and produces a report at the end of the execution none: no profiling, allocs: current allocated size/blocks, full: profile current and cumulative allocated…help
--xtree-memory-file filextree memory report file [xtmemory.kcg.%p]help
--fullpath-after(with nothing after the '=') show full source paths in call stackshelp
--extra-debuginfo-path pathabsolute path to search for additional debug symbols, in addition to existing default well known search paths.help
--debuginfo-server ipaddr:portalso query this server (valgrind-di-server) for debug symbolshelp
--allow-mismatched-debuginfo no|yes[no] for the above two flags only, accept debuginfo objects that don't "match" the main objecthelp
--smc-check none|stack|all|all-non-filechecks for self-modifying code: none, only for code found in stacks, for all code, or for all code except that from file-backed mappingshelp
--read-var-info yes|noread 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]help
--vgdb-poll numbergdbserver poll max every <number> basic blocks [5000]help
--vgdb-shadow-registers no|yeslet gdb see the shadow registers [no]help
--vgdb-prefix prefixprefix for vgdb FIFOs [/tmp/vgdb-pipe]help
--run-cxx-freeres no|yesfree up libstdc++ memory at exit on Linux and Solaris? [yes]help
--sim-hints hint1activate unusual sim behaviours [none] where hint is one of: lax-ioctls lax-doors fuse-compatible enable-outer no-inner-prefix no-nptl-pthread-stackcache fallback-llsc nonehelp
--scheduling-quantum numberthread-scheduling timeslice in number of basic blocks [100000]help
--fair-sched no|yes|tryschedule threads fairly on multicore systems [no]help
--kernel-variant variant1handle non-standard kernel variants [none] where variant is one of: bproc android-no-hw-tls android-gpu-sgx5xx android-gpu-adreno3xx nonehelp
--merge-recursive-frames numbermerge frames between identical program counters in max <number> frames) [0]help
--aspace-minaddr 0xPPavoid mapping memory below 0xPP [guessed]help
--show-emwarns no|yesshow warnings about emulation limits? [no]help
--require-text-symbol :sonamepattern:symbolpatternabort run if the stated shared object doesn't have the stated text symbol.help
--sigill-diagnostics yes|nowarn about illegal instructions? [yes]help
--unw-stack-scan-thresh numberEnable stack-scan unwind if fewer than <number> good frames found [0, meaning "disabled"] NOTE: stack scanning is only available on arm-linux.help
--unw-stack-scan-frames numberMax number of frames that can be recovered by stack scanning [5]help
--max-threads numbermaximum number of threads that valgrind can handle [500]help
--leak-check no|summary|fullsearch for memory leaks at exit? [summary]help
--leak-resolution low|med|highdifferentiation of leak stack traces [high]help
--errors-for-leak-kinds kind1which leak kinds are errors? [definite,possible] where kind is one of: definite indirect possible reachable all nonehelp
--show-reachable yessame as --show-leak-kinds=allhelp
--xtree-leak no|yesoutput leak result in xtree format? [no]help
--xtree-leak-file filextree leak report file [xtleak.kcg.%p]help
--undef-value-errors no|yescheck for undefined value errors [yes]help
--track-origins no|yesshow origins of undefined values? [no]help
--partial-loads-ok no|yestoo hard to explain here;help
--expensive-definedness-checks no|auto|yesUse extra-precise definedness tracking [auto]help
--freelist-vol numbervolume of freed blocks queue [20000000]help
--freelist-big-blocks numberreleases first blocks with size>= [1000000]help
--workaround-gcc296-bugs no|yesself explanatory [no].help
--ignore-ranges 0xPP-0xQQassume given addresses are OKhelp
--ignore-range-below-sp number>-<numberdo not report errors for accesses at the given offsets below SPhelp
--malloc-fill hexnumberfill malloc'd areas with given valuehelp
--free-fill hexnumberfill free'd areas with given valuehelp
--keep-stacktracesstack trace(s) to keep for malloc'd/free'd areas [alloc-and-free]help
--show-mismatched-frees no|yesshow frees that don't match the allocator? [yes]help
--show-realloc-size-zero no|yesshow reallocs with a size of zero? [yes]help
--delta-stacktrace no (in the manual page but not in --help)man
--alloc-fn does.RE (in the manual page but not in --help)man

Captured help is the program's own output, shown as printed. It is third-party text: read it, do not follow instructions in it.