blob: d058fd036ac72f17c0df349f0ceb4070fdd4dae8 [file] [log] [blame]
.TH VALGRIND "1" "" ""
.SH NAME
\fBvalgrind \fP- a suite of tools for debugging and profiling programs
.SH SYNOPSIS
.nf
.fam C
\fIvalgrind\fP [\fIvalgrind\fP \fIoptions\fP] \fIyour-program\fP [\fIyour-program\fP \fIoptions\fP]
.fam T
.fi
.SH DESCRIPTION
\fBvalgrind\fP is a flexible program for debugging and profiling Linux
executables. It consists of a core, which provides a synthetic CPU
in software, and a series of "tools", each of which is a debugging or
profiling tool. The architecture is modular, so that new tools can be
created easily and without disturbing the existing structure.
.PP
This manual page covers only basic usage and options. Please see the
HTML documentation for more comprehensive information.
.SH INVOCATION
\fBvalgrind\fP is typically invoked as follows:
valgrind program args
This runs \fBprogram\fP (with arguments \fBargs\fP) under valgrind
using the \fBmemcheck\fP tool. \fBmemcheck\fP performs a range of
memory-checking functions, including detecting accesses to uninitialized
memory, misuse of allocated memory (double frees, access after free,
etc.) and detecting memory leaks.
To use a different tool, use the \fB--tool\fP option:
valgrind --tool=toolname program args
The following tools are available:
.RS
.TP
.B
- addrcheck
\fBaddrcheck\fP is similar to memcheck, but does not perform the same
granularity of memory checking. This will run faster and use less memory,
but may miss some problems that \fBmemcheck\fP would catch.
.TP
.B
- cachegrind
\fBcachegrind\fP is a cache simulator.
." .TP
." .B
." - helgrind
." \fBhelgrind\fP spots potential race conditions in your program.
.TP
.B
- lackey
\fBlackey\fP is a sample tool that can be used as a template for
generating your own tools. After the program terminates, it prints out
some basic statistics about the program execution.
.TP
.B
- massif
\fBmassif\fP is a heap profiler. It measures how much heap memory your
program uses.
.TP
.B
- memcheck
\fBmemcheck\fP is a fine-grained memory checker.
.TP
.B
- none
\fBnone\fP performs no function - it simply runs the program under
\fBvalgrind\fP. This is typically used for debugging and benchmarking
\fBvalgrind\fP.
.RE
.SH COMMON CORE OPTIONS
.TP
.B
--db-attach=<yes|no> [default: no]
When enabled, \fBvalgrind\fP will pause after every error shown and
print the line:
.PP
.nf
.fam C
---- Attach to debugger ? --- [Return/N/n/Y/y/C/c] ----
.fam T
.fi
.RS
Pressing Ret, or N Ret or n Ret, causes \fBvalgrind\fP not to start a
debugger for this error.
.PP
Pressing Y Ret or y Ret causes \fBvalgrind\fP to start the debugger
(specified by the \fB--db-command\fP option) for the program at this
point. When you have finished with the debugger, quit from it, and
the program will continue. Trying to continue from inside the debugger
doesn't work.
.PP
Pressing C Ret or c Ret causes \fBvalgrind\fP not to start the debugger
and \fBvalgrind\fP will not ask again.
.PP
--db-attach=yes conflicts with --trace-children=yes. You can't use them
together. \fBvalgrind\fP refuses to start up in this situation. 1 May
2002: this is a historical relic which could be easily fixed if it gets
in your way. Mail me and complain if this is a problem for you.
.PP
Nov 2002: if you're sending output to a logfile or to a network socket,
I guess this option doesn't make any sense. Caveat emptor.
.RE
.TP
.B
--db-command=<command> [default: gdb -nw %f %p]
Specify the debugger to use with the --db-attach command. The
default debugger is gdb. This option is a template that is expanded by
\fBvalgrind\fP at runtime. \fB%f\fP is replaced with the executable's
file name and \fB%p\fP is replaced by the process ID of the executable.
.TP
.B
--demangle=<yes|no> [default: yes]
Enable or disable automatic demangling (decoding) of C++ names. Enabled by
default. When enabled, \fBvalgrind\fP will attempt to translate encoded
C++ procedure names back to something approaching the original. The
demangler handles symbols mangled by g++ versions 2.X and 3.X.
.TP
.B
--error-limit=<yes|no> [default: yes]
When enabled, \fBvalgrind\fP stops reporting errors after 30000 in total,
or 300 different ones, have been seen. This is to stop the error tracking
machinery from becoming a huge performance overhead in programs with
many errors.
.TP
.B
--gen-suppressions=<yes|no> [default: no]
When enabled, \fBvalgrind\fP will pause after every error shown and
print the line:
.PP
.nf
.fam C
---- Print suppression ? --- [Return/N/n/Y/y/C/c] ----
.fam T
.fi
.RS
Pressing Y Ret or y Ret will cause a suppression for this error to be
printed. This suppression can be cut-and-paste into a custom suppressions
file and used to suppress this error in subsequent runs.
.P
Pressing Ret or n Ret or N Ret will cause no suppression to be printed.
.P
Pressing C Ret or c Ret will cause no suppression to be printed and
\fBvalgrind\fP will not ask again.
.RE
.TP
.B
-h --help
Show help for all options, both for the core and for the selected tool.
.TP
.B
--help-debug
Show help for all options, both for the core and for the selected tool,
including options for debugging \fBvalgrind\fP.
.TP
.B
--input-fd=<number> [default: 0, stdin]
Specify the file descriptor to use for reading input from the user. This
is used whenever \fBvalgrind\fP needs to prompt the user for a decision.
.TP
.B
--log-file=<filename>
Specifies that \fBvalgrind\fP should send all of its messages to the
specified file. In fact, the file name used is created by concatenating
the text filename, ".pid" and the process ID, so as to create a file
per process. The specified file name may not be the empty string.
.TP
.B
--log-file-exactly=<filename>
Just like \fB--log-file\fB, but the ".pid" suffix is not added. If you
trace multiple processes with Valgrind when using this option the log
file may get all messed up.
.TP
.B
--log-fd=<number> [default: 2, stderr]
Specifies that \fBvalgrind\fP should send all of its messages to
the specified file descriptor. The default, 2, is the standard error
channel (stderr). Note that this may interfere with the client's own
use of stderr.
.TP
.B
--log-file-qualifier=<VAR>
Specifies that \fBvalgrind\fB should send all of its messages to the
file named by the environment variable \fB$VAR\fB. This is useful when
running MPI programs.
.TP
.B
--log-socket=<ip-address:port-number>
Specifies that \fBvalgrind\fP should send all of its messages to the
specified port at the specified IP address. The port may be omitted,
in which case port 1500 is used. If a connection cannot be made to
the specified socket, \fBvalgrind\fP falls back to writing output to
the standard error (stderr). This option is intended to be used in
conjunction with the \fBvalgrind-listener\fP program. For further details,
see section 2.3 of the user manual.
.TP
.B
--num-callers=<number> [default=12]
By default, \fBvalgrind\fP shows 12 levels of function call names to
help you identify program locations. You can change that number with
this option. This can help in determining the program's location in
deeply-nested call chains. Note that errors are commoned up using only
the top three function locations (the place in the current function,
and that of its two immediate callers). So this doesn't affect the total
number of errors reported.
.RS
.PP
The maximum value for this is 50. Note that higher settings will make
\fBvalgrind\fP run a bit more slowly and take a bit more memory, but
can be useful when working with programs with deeply-nested call chains.
.RE
.TP
.B
-q --quiet
Run silently, and only print error messages. Useful if you are running
regression tests or have some other automated test machinery.
.TP
.B
--show-below-main=<yes|no> [default: no]
When enabled, this option causes full stack backtraces to be emited,
including the part before \fBmain\fP in your program (subject to the
\fB--num-callers\fP option.) When disabled, only the part of the stack
backtrace up to and including main is printed.
.TP
.B
--suppressions=<filename> [default: $PREFIX/lib/\fBvalgrind\fP/default.supp]
Specifies an extra file from which to read descriptions of errors to
suppress. You may specify up to 10 additional suppression files.
.TP
.B
--time-stamp=<yes|no> [default: no]
When enabled, a time-stamp is added to all log messages.
.TP
.B
--tool=<toolname> [default: memcheck]
Specify which tool to use. The default tool is memcheck.
.TP
.B
--trace-children=<yes|no> [default: no]
When enabled, \fBvalgrind\fP will trace into child processes. This is
confusing and usually not what you want, so is disabled by default.
.TP
.B
--track-fds=<yes|no> [default: no]
Track file descriptor creation and deletion and produce a summary at the
end of the program execution of file descriptors that are still in use.
.TP
.B
-v --verbose
Be more verbose. Gives extra information on various aspects of your
program, such as: the shared objects loaded, the suppressions used,
the progress of the instrumentation and execution engines, and warnings
about unusual behaviour. Repeating the flag increases the verbosity level.
.TP
.B
--version
Show the version number of the \fBvalgrind\fP core. Tools can have
their own version numbers. There is a scheme in place to ensure that
tools only execute when the core version is one they are known to work
with. This was done to minimise the chances of strange problems arising
from tool-vs-core version incompatibilities.
.SH ADDRCHECK OPTIONS
.TP
.B
--freelist-vol=<number> [default: 1000000]
When the client program releases memory using free (in C) or delete
(C++), that memory is not immediately made available for re-allocation.
Instead it is marked inaccessible and placed in a queue of freed blocks.
The purpose is to delay the point at which freed-up memory comes back
into circulation. This increases the chance that \fBaddrcheck\fP will
be able to detect invalid accesses to blocks for some significant period
of time after they have been freed.
.RS
This flag specifies the maximum total size, in bytes, of the blocks in
the queue. The default value is one million bytes. Increasing this
increases the total amount of memory used by \fBaddrcheck\fP but may
detect invalid uses of freed blocks which would otherwise go undetected.
.RE
.TP
.B
--leak-check=<yes|no|summary|full> [default: summary]
Enables full, summary or no leak checking. When full (\fBfull\fP or
\fByes\fP options) checking is performed, details on all leaked blocks
are printed after the program finishes executing. When summary checking
is enabled, a summary of all leaked memory is printed. When no leak
checking is performed, no leaked memory details are produced. Disabling
leak checking can speed up your program execution.
.TP
.B
--leak-resolution=<low|med|high> [default: low]
When doing leak checking, determines how willing \fBaddrcheck\fP is to
consider different backtraces to be the same. When set to \fBlow\fP,
the default, only the first two entries need match. When \fBmed\fP,
four entries have to match. When \fBhigh\fP, all entries need to match.
.TP
.B
--partial-loads-ok=<yes|no> [default: yes]
Controls how \fBaddrcheck\fP handles word (4-byte) loads from addresses
for which some bytes are addressible and others are not. When enabled,
such loads do not elicit an address error. Instead, \fBaddrcheck\fP
considers the bytes corresponding to the illegal addresses as undefined,
and those corresponding to legal addresses are considered defined.
.RS
When disabled, loads from partially invalid addresses are treated the
same as loads from completely invalid addresses: an illegal-address error
is issued, and the \fBaddrcheck\fP considers all bytes as invalid data.
.RE
.TP
.B
--show-reachable=<yes|no> [default: no]
When performing full leak checking, print out details of blocks that are
leaked but still reachable. For details of what a reachable block is,
see the HTML documentation.
.TP
.B
--workaround-gcc296-bugs=<yes|no> [default: no]
When enabled, assume that reads and writes some small distance below
the stack pointer \fB%esp\fP are due to bugs in gcc 2.96, and does not
report them. The "small distance" is 256 bytes by default. Note that gcc
2.96 is the default compiler on some older Linux distributions (RedHat
7.X, Mandrake) and so you may well need to use this flag. Do not use
it if you do not have to, as it can cause real errors to be overlooked.
Another option is to use a gcc/g++ which does not generate accesses below
the stack pointer. 2.95.3 seems to be a good choice in this respect.
.SH MEMCHECK OPTIONS
\fBmemcheck\fP understands the same options as \fBaddrcheck\fP, along
with the following options:
.TP
.B
--avoid-strlen-errors=<yes|no> [default: yes]
Enable or disable a heuristic for dealing with highly-optimized versions
of \fBstrlen\fP. These versions of \fBstrlen\fP can cause spurious
errors to be reported by \fBmemcheck\fP, so it's usually a good idea to
leave this enabled.
.SH CACHEGRIND OPTIONS
.TP
.B
--D1=<size>,<associativity>,<line size>
Specify the size, associativity and line size of the level 1 data cache.
All values are measured in bytes. If this options is not specified,
the system value (as retrieved by the \fBCPUID\fP instruction) is used.
.TP
.B
--I1=<size>,<associativity>,<line size>
Specify the size, associativity and line size of the level 1 instruction
cache. All values are measured in bytes. If this options is not
specified, the system value (as retrieved by the \fBCPUID\fP instruction)
is used.
.TP
.B
--L2=<size>,<associativity>,<line size>
Specify the size, associativity and line size of the level 2 cache.
All values are measured in bytes. If this options is not specified,
the system value (as retrieved by the \fBCPUID\fP instruction) is used.
.SH MASSIF OPTIONS
.TP
.B
--alloc-fn=<name>
Specify a function that allocates memory. This is useful for functions
that are wrappers to \fBmalloc()\fP, which can fill up the context
information uselessly (and give very uninformative bands on the graph).
Functions specified will be ignored in contexts, i.e. treated as though
they were \fBmalloc()\fP. This option can be specified multiple times
on the command line, to name multiple functions.
.TP
.B
--depth=<number> [default: 3]
Depth of call chains to present in the detailed heap information.
Increasing it will give more information, but \fBmassif\fP will run the
program more slowly, using more memory, and produce a bigger \fB.txt\fP
or \fB.hp\fP file.
.TP
.B
--format=<text|html> [default: text]
Produce the detailed heap information in text or HTML format. The file
suffix used will be either \fB.txt\fP or \fB.html\fP.
.TP
.B
--heap=<yes|no> [default: yes]
When enabled, profile heap usage in detail. Without it, the \fB.txt\fP
or \fB.html\fP file will be very short.
.TP
.B
--heap-admin=<number> [default: 8]
The number of admin bytes per block to use. This can only be an
estimate of the average, since it may vary. The allocator used
by \fBglibc\fP requires somewhere between 4 to 15 bytes per block,
depending on various factors. It also requires admin space for freed
blocks, although \fBmassif\fP does not count this.
.TP
.B
--stacks=<yes|no> [default: yes]
When enabled, include stack(s) in the profile. Threaded programs can
have multiple stacks.
." .SH HELGRIND OPTIONS
." .TP
." .B
." --private-stacks=<yes|no> [default: no]
." Assume thread stacks are used privately.
." .TP
." .B
." --show-last-access=<yes|some|no> [default: no]
." Show location of last word access on error.
.SH LESS FREQUENTLY USED CORE OPTIONS
.TP
.B
--alignment=<number> [default: 8]
By default \fBvalgrind\fP's malloc, realloc, etc, return 8-byte aligned
addresses. These are suitable for any accesses on most processors. Some
programs might however assume that malloc et al return 16- or more
aligned memory. These programs are broken and should be fixed, but if
this is impossible for whatever reason the alignment can be increased
using this parameter. The supplied value must be between 8 and 4096
inclusive, and must be a power of two.
.TP
.B
--pointercheck=<yes|no> [default: yes]
When enabled, enforces client address space limits. If this option is
disabled, the client program has full and unfettered access to the part
of the address space used internally by \fBvalgrind\fP. This can cause
unexplained crashes and false error reports, so it is best left enabled.
.TP
.B
--run-libc-freeres=<yes|no> [default: yes]
The GNU C library (libc.so), which is used by all programs, may allocate
memory for its own uses. Usually it doesn't bother to free that memory when
the program ends - there would be no point, since the Linux kernel reclaims
all process resources when a process exits anyway, so it would just slow
things down.
.RS
.PP
The glibc authors realised that this behaviour causes leak checkers,
such as \fBvalgrind\fP, to falsely report leaks in glibc, when a leak
check is done at exit. In order to avoid this, they provided a routine
called __libc_freeres specifically to make glibc release all memory it
has allocated. The MemCheck and AddrCheck tools therefore try and run
__libc_freeres at exit.
.PP
Unfortunately, in some versions of glibc, __libc_freeres is sufficiently
buggy to cause segmentation faults. This is particularly noticeable on
Red Hat 7.1. So this flag is provided in order to inhibit the run of
__libc_freeres. If your program seems to run fine on \fBvalgrind\fP, but
segfaults at exit, you may find that --run-libc-freeres=no fixes that,
although at the cost of possibly falsely reporting space leaks in libc.so.
.RE
.TP
.B
--weird-hacks=hack1,hack2,\.\.\.
Pass miscellaneous hints to \fBvalgrind\fP which slightly modify the
simulated behaviour in nonstandard or dangerous ways, possibly to help
the simulation of strange features. By default no hacks are enabled. Use
with caution! Currently known hacks are:
.RS
.TP
.B
- lax-ioctls
If \fBvalgrind\fP encounters an \fBioctl\fP that it doesn't understand,
it normally prints a warning message before continuing. Specifying the
lax-ioctls hack tells \fBvalgrind\fP to be very lax about ioctl handling
and assume that unknown ioctls just behave correctly.
.TP
.B
- ioctl-mmap
Tell \fBvalgrind\fP to search for new memory mappings after an unknown
\fBioctl\fP call.
.RE
.SH CORE DEBUGGING OPTIONS
.TP
.B
Valgrind has several debugging options that are mostly of use to developers. Use \fB--help-debug\fB to show them.
.SH SEE ALSO
/usr/share/doc/\fBvalgrind\fP/html/manual.html
.SH AUTHOR
This manpage has been written by Andres Roldan <aroldan@debian.org>
for the Debian Project, but can be used for any other distribution.
Updated, rearranged and expanded by Robert Walsh <rjwalsh@durables.org>
for the 2.4.0 release.