blob: a43fae5be87c7d46c7dcebf0af7c5c59c55ca7b0 [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
sewardj3ecfaaa2007-03-26 02:11:17 +000012tools for programs running on Linux (x86, amd64, ppc32 and ppc64).
13The system consists of a core, which provides a synthetic CPU in
sewardj778d7832007-11-22 01:21:56 +000014software, and a set of tools, each of which performs some kind of
sewardj3ecfaaa2007-03-26 02:11:17 +000015debugging, profiling, or similar task. The architecture is modular,
16so that new tools can be created easily and without disturbing the
17existing structure.</para>
njn3e986b22004-11-30 10:43:45 +000018
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
sewardj08e31e22007-05-23 21:58:33 +000026 in programs. All reads and writes of memory are checked, and
debad57fc2005-12-03 22:33:29 +000027 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,
sewardj08e31e22007-05-23 21:58:33 +000062 often remaining undetected for long periods, then causing occasional,
debad57fc2005-12-03 22:33:29 +000063 difficult-to-diagnose crashes.</para>
njn3e986b22004-11-30 10:43:45 +000064 </listitem>
65
66 <listitem>
njn3e986b22004-11-30 10:43:45 +000067 <para><command>Cachegrind</command> is a cache profiler. It
debad57fc2005-12-03 22:33:29 +000068 performs detailed simulation of the I1, D1 and L2 caches in your CPU
69 and so can accurately pinpoint the sources of cache misses in your
sewardj08e31e22007-05-23 21:58:33 +000070 code. It will show the number of cache misses,
debad57fc2005-12-03 22:33:29 +000071 memory references and instructions accruing to each line of source
72 code, with per-function, per-module and whole-program summaries. If
73 you ask really nicely it will even show counts for each individual
74 machine instruction.</para>
njn3e986b22004-11-30 10:43:45 +000075
sewardj08e31e22007-05-23 21:58:33 +000076 <para>On x86 and and64, Cachegrind auto-detects your machine's cache
debad57fc2005-12-03 22:33:29 +000077 configuration using the <computeroutput>CPUID</computeroutput>
78 instruction, and so needs no further configuration info, in most
79 cases.</para>
njn3e986b22004-11-30 10:43:45 +000080 </listitem>
81
82 <listitem>
sewardj08e31e22007-05-23 21:58:33 +000083 <para><command>Callgrind</command> is a profiler similar in
84 concept to Cachegrind, but which also tracks caller-callee
85 relationships. By doing so it is able to show how instruction,
86 memory reference and cache miss costs flow between callers and
87 callees. Callgrind collects a large amount of data which is best
88 navigated using Josef Weidendorfer's amazing KCachegrind
89 visualisation tool (<ulink
90 url="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindIndex">http://kcachegrind.sourceforge.net</ulink>).
91 KCachegrind is a KDE application which presents
92 these profiling results in a
93 graphical and easy-to-understand form.</para>
94 </listitem>
njn3e986b22004-11-30 10:43:45 +000095
sewardj08e31e22007-05-23 21:58:33 +000096 <listitem>
97 <para><command>Massif</command> is a heap profiler.
98 It measures how much heap memory programs use. In particular,
99 it can give you information about heap blocks, heap
100 administration overheads, and stack sizes.</para>
njn3e986b22004-11-30 10:43:45 +0000101
sewardj08e31e22007-05-23 21:58:33 +0000102 <para>Heap profiling can help you reduce the amount of
103 memory your program uses. On modern machines with virtual
104 memory, this reduces the chances that your program will run out
105 of memory, and may make it faster by reducing the amount of
106 paging needed.</para>
njn3e986b22004-11-30 10:43:45 +0000107 </listitem>
108
sewardj778d7832007-11-22 01:21:56 +0000109 <listitem>
110 <para><command>Helgrind</command> detects synchronisation errors
111 in programs that use the POSIX pthreads threading primitives. It
112 detects the following three classes of errors:</para>
113
114 <itemizedlist>
115 <listitem>
116 <para>Misuses of the POSIX pthreads API.</para>
117 </listitem>
118 <listitem>
119 <para>Potential deadlocks arising from lock ordering
120 problems.</para>
121 </listitem>
122 <listitem>
123 <para>Data races -- accessing memory without adequate locking.</para>
124 </listitem>
125 </itemizedlist>
126
127 <para>Problems like these often result in unreproducible,
128 timing-dependent crashes, deadlocks and other misbehaviour, and
129 can be difficult to find by other means.</para>
130
131 </listitem>
132
njn3e986b22004-11-30 10:43:45 +0000133</orderedlist>
134
135
debad57fc2005-12-03 22:33:29 +0000136<para>A couple of minor tools (<command>Lackey</command> and
137<command>Nulgrind</command>) are also supplied. These aren't
138particularly useful -- they exist to illustrate how to create simple
139tools and to help the valgrind developers in various ways. Nulgrind is
140the null tool -- it adds no instrumentation. Lackey is a simple example
141tool which counts instructions, memory accesses, and the number of
sewardj053fe982005-11-15 19:51:04 +0000142integer and floating point operations your program does.</para>
njn3e986b22004-11-30 10:43:45 +0000143
njn779a2d62005-07-25 00:12:19 +0000144<para>Valgrind is closely tied to details of the CPU and operating
145system, and to a lesser extent, the compiler and basic C libraries.
sewardj778d7832007-11-22 01:21:56 +0000146Nonetheless, as of version 3.3.0 it supports several platforms:
sewardj08e31e22007-05-23 21:58:33 +0000147x86/Linux (mature), amd64/Linux (maturing), ppc32/Linux and
sewardj778d7832007-11-22 01:21:56 +0000148ppc64/Linux (less mature but work well). There is also experimental
149support for ppc32/AIX5 and ppc64/AIX5 (AIX 5.2 and 5.3 only).
150Valgrind uses the standard Unix
njn3e986b22004-11-30 10:43:45 +0000151<computeroutput>./configure</computeroutput>,
152<computeroutput>make</computeroutput>, <computeroutput>make
debad57fc2005-12-03 22:33:29 +0000153install</computeroutput> mechanism, and we have attempted to ensure that
sewardj08e31e22007-05-23 21:58:33 +0000154it works on machines with Linux kernel 2.4.X or 2.6.X and glibc
sewardj778d7832007-11-22 01:21:56 +00001552.2.X to 2.7.X.</para>
njn3e986b22004-11-30 10:43:45 +0000156
157<para>Valgrind is licensed under the <xref linkend="license.gpl"/>,
debad57fc2005-12-03 22:33:29 +0000158version 2. The <computeroutput>valgrind/*.h</computeroutput> headers
159that you may wish to include in your code (eg.
sewardj778d7832007-11-22 01:21:56 +0000160<filename>valgrind.h</filename>, <filename>memcheck.h</filename>,
161<filename>helgrind.h</filename>) are
debad57fc2005-12-03 22:33:29 +0000162distributed under a BSD-style license, so you may include them in your
163code without worrying about license conflicts. Some of the PThreads
164test cases, <filename>pth_*.c</filename>, are taken from "Pthreads
165Programming" by Bradford Nichols, Dick Buttlar &amp; Jacqueline Proulx
166Farrell, ISBN 1-56592-115-1, published by O'Reilly &amp; Associates,
167Inc.</para>
njn3e986b22004-11-30 10:43:45 +0000168
sewardj778d7832007-11-22 01:21:56 +0000169<para>If you contribute code to Valgrind, please ensure your
170contributions are licensed as "GPLv2, or (at your option) any later
171version." This is so as to allow the possibility of easily upgrading
172the license to GPLv3 in future. If you want to modify code in the VEX
173subdirectory, please also see VEX/HACKING.README.</para>
174
175
njn3e986b22004-11-30 10:43:45 +0000176</sect1>
177
178
179<sect1 id="manual-intro.navigation" xreflabel="How to navigate this manual">
180<title>How to navigate this manual</title>
181
debad57fc2005-12-03 22:33:29 +0000182<para>The Valgrind distribution consists of the Valgrind core, upon
sewardj08e31e22007-05-23 21:58:33 +0000183which are built Valgrind tools. The tools do different kinds of debugging
debad57fc2005-12-03 22:33:29 +0000184and profiling. This manual is structured similarly.</para>
njn3e986b22004-11-30 10:43:45 +0000185
debad57fc2005-12-03 22:33:29 +0000186<para>First, we describe the Valgrind core, how to use it, and the flags
187it supports. Then, each tool has its own chapter in this manual. You
188only need to read the documentation for the core and for the tool(s) you
189actually use, although you may find it helpful to be at least a little
sewardj33878892007-11-17 09:43:25 +0000190bit familiar with what all tools do. If you're new to all this, you probably
njne5eaf3a2006-10-23 21:21:48 +0000191want to run the Memcheck tool. The final chapter explains how to write a
192new tool.</para>
njn3e986b22004-11-30 10:43:45 +0000193
debad57fc2005-12-03 22:33:29 +0000194<para>Be aware that the core understands some command line flags, and
sewardj778d7832007-11-22 01:21:56 +0000195the tools have their own flags which they know about. This means
196there is no central place describing all the flags that are
197accepted -- you have to read the flags documentation both for
debad57fc2005-12-03 22:33:29 +0000198<xref linkend="manual-core"/> and for the tool you want to use.</para>
njn3e986b22004-11-30 10:43:45 +0000199
sewardj778d7832007-11-22 01:21:56 +0000200<para>The manual is quite big and complex. If you are looking for a
201quick getting-started guide, have a look at
202<xref linkend="quick-start"/>.</para>
203
njn3e986b22004-11-30 10:43:45 +0000204</sect1>
205
206</chapter>