A number of useful tools are supplied as standard. In summary, these are:
src
and dst
pointers in
memcpy()
and related functionsProblems like these can be difficult to find by other means, often lying undetected for long periods, then causing occasional, difficult-to-diagnose crashes.
Cachegrind auto-detects your machine's cache configuration
using the CPUID
instruction, and so needs no further
configuration info, in most cases.
Cachegrind is nicely complemented by Josef Weidendorfer's amazing KCacheGrind visualisation tool ( http://kcachegrind.sourceforge.net), a KDE application which presents these profiling results in a graphical and easier-to-understand form.
But the upside is significant: programs run about twice as fast as they do on Memcheck, and a lot less memory is used. It still finds reads/writes of freed memory, memory off the end of blocks and in other invalid places, bugs which you really want to find before release!
Because Addrcheck is lighter and faster than Memcheck, you can run more programs for longer, and so you may be able to cover more test scenarios. Addrcheck was created because one of us (Julian) wanted to be able to run a complete KDE desktop session with checking. As of early November 2002, we have been able to run KDE-3.0.3 on a 1.7 GHz P4 with 512 MB of memory, using Addrcheck. Although the result is not stellar, it's quite usable, and it seems plausible to run KDE for long periods at a time like this, collecting up all the addressing errors that appear.
Helgrind ("Hell's Gate", in Norse mythology) implements the so-called "Eraser" data-race-detection algorithm, along with various refinements (thread-segment lifetimes) which reduce the number of false errors it reports. It is as yet somewhat of an experimental tool, so your feedback is especially welcomed here.
Helgrind has been hacked on extensively by Jeremy Fitzhardinge, and we have him to thank for getting it to a releasable state.
Valgrind is closely tied to details of the CPU, operating system and
to a less extent, compiler and basic C libraries. This makes it
difficult to make it portable, so we have chosen at the outset to
concentrate on what we believe to be a widely used platform: Linux on
x86s. Valgrind uses the standard Unix ./configure
,
make
, make install
mechanism, and we have
attempted to ensure that it works on machines with kernel 2.2 or 2.4
and glibc 2.1.X, 2.2.X or 2.3.1. This should cover the vast majority
of modern Linux installations. Note that glibc-2.3.2+, with the
NPTL (Native Posix Threads Library) package won't work. We hope to
be able to fix this, but it won't be easy.
Valgrind is licensed under the GNU General Public License, version
2. Read the file LICENSE in the source distribution for details. Some
of the PThreads test cases, pth_*.c
, are taken from
"Pthreads Programming" by Bradford Nichols, Dick Buttlar &
Jacqueline Proulx Farrell, ISBN 1-56592-115-1, published by O'Reilly
& Associates, Inc.
The tools each have their own chapters in this manual. You only need to read the documentation for the core services and for the tool(s) you actually use, although you may find it helpful to be at least a little bit familar with what all tools do. If you want to write a new tool, read this.
If you're new to all this, you're most likely to be using the Memcheck tool, since that's the one selected by default. So, read the rest of this page, and the section Memcheck.
Be aware that the core understands some command line flags, and the tools have their own flags which they know about. This means there is no central place describing all the flags that are accepted -- you have to read the flags documentation both for valgrind's core and for the tool you want to use.
Valgrind-2.0.X is a major redesign of the 1.0.X series. You should at
least be familiar with the concept of the core/tool division,
as explained above in the Introduction. Having said that, we've tried
to make the command line handling and behaviour as
backwards-compatible as we can. In particular, just running
valgrind [args-for-valgrind] my_prog [args-for-my-prog]
should work pretty much as before.