mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
576 lines
19 KiB
Groff
576 lines
19 KiB
Groff
.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.
|
|
." (\fBaddrcheck\fP is currently not working.)
|
|
.TP
|
|
.B
|
|
- cachegrind
|
|
\fBcachegrind\fP is a cache simulator. It can be used to annotate every
|
|
line of your program with the number of instructions executed and cache
|
|
misses incurred.
|
|
." .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, 3.X and 4.X.
|
|
|
|
.TP
|
|
.B
|
|
--error-limit=<yes|no> [default: yes]
|
|
When enabled, \fBvalgrind\fP stops reporting errors after 100000 in total,
|
|
or 1000 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|all> [default: no]
|
|
When set to \fByes\fP, \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.
|
|
|
|
.P
|
|
When set to \fall\fP, \fBvalgrind\fP will print suppressions for all
|
|
errors without asking any questions.
|
|
.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-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 in this case \fBvalgrind\fP's output will be
|
|
interleaved with any output that the client sends to stderr.
|
|
|
|
.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 and the process ID (ie. <filename>.<pid>), 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\fP, 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-file-qualifier=<VAR>
|
|
Specifies that \fBvalgrind\fP should send all of its messages to the
|
|
file named by the environment variable \fB$VAR\fP. 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
|
|
--max-stackframe=<number> [default: 2000000]
|
|
The maximum size of a stack frame - if the stack pointer moves by more
|
|
than this amount then \fBvalgrind\fP will assume that the program is
|
|
switching to a different stack.
|
|
|
|
.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 in most cases errors are commoned up
|
|
using only the top four function locations (the place in the current
|
|
function, and that of its three 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 (or similar functions such as glibc's
|
|
\fB__libc_start_main\fP, if \fBmain\fP is not present in the stack trace) in
|
|
your program (subject to the \fB--num-callers\fP option.) When disabled,
|
|
only the part of the stack backtrace up to and including \fBmain\fP 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. It shows how long
|
|
has elapsed since the client program started.
|
|
|
|
.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 can be
|
|
confusing and usually not what you want, so is disabled by default. But
|
|
it is necessary is some cases, particularly if your program is started
|
|
by a script.
|
|
|
|
.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.
|
|
|
|
.TP
|
|
.B
|
|
--xml=<yes|no> [default: no]
|
|
Generate output in XML format. Only \fBmemcheck\fP and \fBnulgrind\fP
|
|
currently support this option.
|
|
|
|
.TP
|
|
.B
|
|
--xml-user-comment=<string>
|
|
The specified string will be output at the start of the XML file
|
|
if XML output is requested.
|
|
|
|
.SH MEMCHECK OPTIONS
|
|
|
|
.TP
|
|
.B
|
|
--freelist-vol=<number> [default: 5000000]
|
|
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 \fBmemcheck\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 \fBmemcheck\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 \fBmemcheck\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: no]
|
|
Controls how \fBmemcheck\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, \fBmemcheck\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 \fBmemcheck\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 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
|
|
--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
|
|
--sim-hints=hint1,hint2,\.\.\.
|
|
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 hints are enabled. Use
|
|
with caution! Currently known hints 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
|
|
- enable-outer
|
|
Enable some special magic needed when the program being run is
|
|
itself \fBvalgrind\fP.
|
|
.RE
|
|
|
|
.TP
|
|
.B
|
|
--smc-check=<none|stack|all> [default: stack]
|
|
Control which areas of memory \fBvalgrind\fP should consider might
|
|
contain self modifying code.
|
|
|
|
.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, and other Valgrind developers subsequently.
|