blob: 35e4a85e01b5b4b526b13fa11a943937f77831fb [file] [log] [blame]
njn3e986b22004-11-30 10:43:45 +00001<?xml version="1.0"?> <!-- -*- sgml -*- -->
2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4
5<chapter id="manual-intro" xreflabel="Introduction">
6<title>Introduction</title>
7
8<sect1 id="manual-intro.overview" xreflabel="An Overview of Valgrind">
9<title>An Overview of Valgrind</title>
10
debad57fc2005-12-03 22:33:29 +000011<para>Valgrind is a suite of simulation-based debugging and profiling
12tools for programs running on Linux (x86, amd64 and ppc32). The system
13consists of a core, which provides a synthetic CPU in software, and a
14series of tools, each of which performs some kind of debugging,
15profiling, or similar task. The architecture is modular, so that new
16tools can be created easily and without disturbing the existing
njn3e986b22004-11-30 10:43:45 +000017structure.</para>
18
19<para>A number of useful tools are supplied as standard. In
20summary, these are:</para>
21
22<orderedlist>
23
24 <listitem>
debad57fc2005-12-03 22:33:29 +000025 <para><command>Memcheck</command> detects memory-management problems
26 in your programs. All reads and writes of memory are checked, and
27 calls to malloc/new/free/delete are intercepted. As a result,
28 Memcheck can detect the following problems:</para>
njn3e986b22004-11-30 10:43:45 +000029
30 <itemizedlist>
31 <listitem>
32 <para>Use of uninitialised memory</para>
33 </listitem>
34 <listitem>
35 <para>Reading/writing memory after it has been
36 free'd</para>
37 </listitem>
38 <listitem>
39 <para>Reading/writing off the end of malloc'd
40 blocks</para>
41 </listitem>
42 <listitem>
43 <para>Reading/writing inappropriate areas on the
44 stack</para>
45 </listitem>
46 <listitem>
47 <para>Memory leaks -- where pointers to malloc'd
48 blocks are lost forever</para>
49 </listitem>
50 <listitem>
51 <para>Mismatched use of malloc/new/new [] vs
52 free/delete/delete []</para>
53 </listitem>
54 <listitem>
55 <para>Overlapping <computeroutput>src</computeroutput> and
56 <computeroutput>dst</computeroutput> pointers in
57 <computeroutput>memcpy()</computeroutput> and related
sewardj053fe982005-11-15 19:51:04 +000058 functions</para></listitem>
njn3e986b22004-11-30 10:43:45 +000059 </itemizedlist>
60
debad57fc2005-12-03 22:33:29 +000061 <para>Problems like these can be difficult to find by other means,
62 often lying undetected for long periods, then causing occasional,
63 difficult-to-diagnose crashes.</para>
njn3e986b22004-11-30 10:43:45 +000064 </listitem>
65
66 <listitem>
debad57fc2005-12-03 22:33:29 +000067 <para><command>Addrcheck</command> is a lightweight version of
68 Memcheck. It is identical to Memcheck except for the single detail
69 that it does not do any uninitialised-value checks. All of the
70 other checks -- primarily the fine-grained address checking -- are
71 still done. The downside of this is that you don't catch the
njn3e986b22004-11-30 10:43:45 +000072 uninitialised-value errors that Memcheck can find.</para>
73
debad57fc2005-12-03 22:33:29 +000074 <para>But the upside is significant: programs run about twice as
75 fast as they do on Memcheck, and a lot less memory is used. It
76 still finds reads/writes of freed memory, memory off the end of
77 blocks and in other invalid places, bugs which you really want to
78 find before release!</para>
njn3e986b22004-11-30 10:43:45 +000079
debad57fc2005-12-03 22:33:29 +000080 <para>Because Addrcheck is lighter and faster than Memcheck, you can
81 run more programs for longer, and so you may be able to cover more
82 test scenarios. Addrcheck was created because one of us (Julian)
83 wanted to be able to run a complete KDE desktop session with
84 checking. As of early November 2002, we have been able to run
85 KDE-3.0.3 on a 1.7 GHz P4 with 512 MB of memory, using Addrcheck.
86 Although the result is not stellar, it's quite usable, and it seems
87 plausible to run KDE for long periods at a time like this,
88 collecting up all the addressing errors that appear.</para>
sewardj053fe982005-11-15 19:51:04 +000089
90 <para>NOTE: Addrcheck is not available in Valgrind 3.1.X. We hope
debad57fc2005-12-03 22:33:29 +000091 to reinstate its functionality in later releases. For now, use
sewardj053fe982005-11-15 19:51:04 +000092 Memcheck instead.</para>
njn3e986b22004-11-30 10:43:45 +000093 </listitem>
94
95 <listitem>
96 <para><command>Cachegrind</command> is a cache profiler. It
debad57fc2005-12-03 22:33:29 +000097 performs detailed simulation of the I1, D1 and L2 caches in your CPU
98 and so can accurately pinpoint the sources of cache misses in your
99 code. If you desire, it will show the number of cache misses,
100 memory references and instructions accruing to each line of source
101 code, with per-function, per-module and whole-program summaries. If
102 you ask really nicely it will even show counts for each individual
103 machine instruction.</para>
njn3e986b22004-11-30 10:43:45 +0000104
njn779a2d62005-07-25 00:12:19 +0000105 <para>On x86 and AMD64, Cachegrind auto-detects your machine's cache
debad57fc2005-12-03 22:33:29 +0000106 configuration using the <computeroutput>CPUID</computeroutput>
107 instruction, and so needs no further configuration info, in most
108 cases.</para>
njn3e986b22004-11-30 10:43:45 +0000109
debad57fc2005-12-03 22:33:29 +0000110 <para>Cachegrind is nicely complemented by Josef Weidendorfer's
111 amazing KCacheGrind visualisation tool
de252c6142005-11-27 04:10:00 +0000112 (<ulink url="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindIndex">http://kcachegrind.sourceforge.net</ulink>),
njn3e986b22004-11-30 10:43:45 +0000113 a KDE application which presents these profiling results in a
114 graphical and easier-to-understand form.</para>
115 </listitem>
116
117 <listitem>
debad57fc2005-12-03 22:33:29 +0000118 <para><command>Helgrind</command> finds data races in multithreaded
119 programs. Helgrind looks for memory locations which are accessed by
120 more than one (POSIX p-)thread, but for which no consistently used
121 (pthread_mutex_)lock can be found. Such locations are indicative of
122 missing synchronisation between threads, and could cause
123 hard-to-find timing-dependent problems.</para>
njn3e986b22004-11-30 10:43:45 +0000124
debad57fc2005-12-03 22:33:29 +0000125 <para>Helgrind ("Hell's Gate", in Norse mythology) implements the
126 so-called "Eraser" data-race-detection algorithm, along with various
127 refinements (thread-segment lifetimes) which reduce the number of
128 false errors it reports. It is as yet somewhat of an experimental
129 tool, so your feedback is especially welcomed here.</para>
njn3e986b22004-11-30 10:43:45 +0000130
131 <para>Helgrind has been hacked on extensively by Jeremy
132 Fitzhardinge, and we have him to thank for getting it to a
133 releasable state.</para>
sewardj053fe982005-11-15 19:51:04 +0000134
debad57fc2005-12-03 22:33:29 +0000135 <para>NOTE: Helgrind is, unfortunately, not available in Valgrind
136 3.1.X, as a result of threading changes that happened in the 2.4.0
137 release. We hope to reinstate its functionality in a future 3.2.0
138 release.</para>
njn3e986b22004-11-30 10:43:45 +0000139 </listitem>
140
141</orderedlist>
142
143
debad57fc2005-12-03 22:33:29 +0000144<para>A couple of minor tools (<command>Lackey</command> and
145<command>Nulgrind</command>) are also supplied. These aren't
146particularly useful -- they exist to illustrate how to create simple
147tools and to help the valgrind developers in various ways. Nulgrind is
148the null tool -- it adds no instrumentation. Lackey is a simple example
149tool which counts instructions, memory accesses, and the number of
sewardj053fe982005-11-15 19:51:04 +0000150integer and floating point operations your program does.</para>
njn3e986b22004-11-30 10:43:45 +0000151
njn779a2d62005-07-25 00:12:19 +0000152<para>Valgrind is closely tied to details of the CPU and operating
153system, and to a lesser extent, the compiler and basic C libraries.
debad57fc2005-12-03 22:33:29 +0000154Nonetheless, as of version 3.1.0 it supports several platforms:
155x86/Linux (mature), AMD64/Linux (maturing), and PPC32/Linux (immature
156but works well). Valgrind uses the standard Unix
njn3e986b22004-11-30 10:43:45 +0000157<computeroutput>./configure</computeroutput>,
158<computeroutput>make</computeroutput>, <computeroutput>make
debad57fc2005-12-03 22:33:29 +0000159install</computeroutput> mechanism, and we have attempted to ensure that
160it works on machines with kernel 2.4 or 2.6 and glibc
sewardj053fe982005-11-15 19:51:04 +00001612.2.X--2.3.X.</para>
njn3e986b22004-11-30 10:43:45 +0000162
163<para>Valgrind is licensed under the <xref linkend="license.gpl"/>,
debad57fc2005-12-03 22:33:29 +0000164version 2. The <computeroutput>valgrind/*.h</computeroutput> headers
165that you may wish to include in your code (eg.
166<filename>valgrind.h</filename>, <filename>memcheck.h</filename>) are
167distributed under a BSD-style license, so you may include them in your
168code without worrying about license conflicts. Some of the PThreads
169test cases, <filename>pth_*.c</filename>, are taken from "Pthreads
170Programming" by Bradford Nichols, Dick Buttlar &amp; Jacqueline Proulx
171Farrell, ISBN 1-56592-115-1, published by O'Reilly &amp; Associates,
172Inc.</para>
njn3e986b22004-11-30 10:43:45 +0000173
174</sect1>
175
176
177<sect1 id="manual-intro.navigation" xreflabel="How to navigate this manual">
178<title>How to navigate this manual</title>
179
debad57fc2005-12-03 22:33:29 +0000180<para>The Valgrind distribution consists of the Valgrind core, upon
181which are built Valgrind tools, which do different kinds of debugging
182and profiling. This manual is structured similarly.</para>
njn3e986b22004-11-30 10:43:45 +0000183
debad57fc2005-12-03 22:33:29 +0000184<para>First, we describe the Valgrind core, how to use it, and the flags
185it supports. Then, each tool has its own chapter in this manual. You
186only need to read the documentation for the core and for the tool(s) you
187actually use, although you may find it helpful to be at least a little
188bit familar with what all tools do. If you're new to all this, you
189probably want to run the Memcheck tool. If you want to write a new
190tool, read <xref linkend="writing-tools"/>.</para>
njn3e986b22004-11-30 10:43:45 +0000191
debad57fc2005-12-03 22:33:29 +0000192<para>Be aware that the core understands some command line flags, and
193the tools have their own flags which they know about. This means there
194is no central place describing all the flags that are accepted -- you
195have to read the flags documentation both for
196<xref linkend="manual-core"/> and for the tool you want to use.</para>
njn3e986b22004-11-30 10:43:45 +0000197
198</sect1>
199
200</chapter>