blob: 1d1e42ab4a1def5de44460025375e62c378cd4d4 [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"
njn05a89172009-07-29 02:36:21 +00003 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
4[ <!ENTITY % vg-entities SYSTEM "vg-entities.xml"> %vg-entities; ]>
njn3e986b22004-11-30 10:43:45 +00005
6<chapter id="manual-intro" xreflabel="Introduction">
7<title>Introduction</title>
8
9<sect1 id="manual-intro.overview" xreflabel="An Overview of Valgrind">
10<title>An Overview of Valgrind</title>
11
njn05a89172009-07-29 02:36:21 +000012<para>Valgrind is an instrumentation framework for building dynamic analysis
13tools. It comes with a set of tools each of which performs some kind of
14debugging, profiling, or similar task that helps you improve your programs.
15Valgrind's architecture is modular, so new tools can be created easily
16and without disturbing the existing structure.</para>
njn3e986b22004-11-30 10:43:45 +000017
njn05a89172009-07-29 02:36:21 +000018<para>A number of useful tools are supplied as standard.</para>
njn3e986b22004-11-30 10:43:45 +000019
20<orderedlist>
21
22 <listitem>
njn05a89172009-07-29 02:36:21 +000023 <para><command>Memcheck</command> is a memory error detector. It helps
24 you make your programs, particularly those written in C and C++, more
25 correct.</para>
26 </listitem>
njn3e986b22004-11-30 10:43:45 +000027
njn05a89172009-07-29 02:36:21 +000028 <listitem>
29 <para><command>Cachegrind</command> is a cache and branch-prediction
njn7316df22009-08-04 01:16:01 +000030 profiler. It helps you make your programs run faster.</para>
njn05a89172009-07-29 02:36:21 +000031 </listitem>
njn3e986b22004-11-30 10:43:45 +000032
njn05a89172009-07-29 02:36:21 +000033 <listitem>
34 <para><command>Callgrind</command> is a call-graph generating cache
35 profiler. It has some overlap with Cachegrind, but also gathers some
36 information that Cachegrind does not.</para>
37 </listitem>
njn3e986b22004-11-30 10:43:45 +000038
njn05a89172009-07-29 02:36:21 +000039 <listitem>
40 <para><command>Helgrind</command> is a thread error detector.
njn7316df22009-08-04 01:16:01 +000041 It helps you make your multi-threaded programs more correct.
njn05a89172009-07-29 02:36:21 +000042 </para>
43 </listitem>
njn3e986b22004-11-30 10:43:45 +000044
njn05a89172009-07-29 02:36:21 +000045 <listitem>
46 <para><command>DRD</command> is also a thread error detector. It is
47 similar to Helgrind but uses different analysis techniques and so may
48 find different problems.</para>
49 </listitem>
sewardj778d7832007-11-22 01:21:56 +000050
njn05a89172009-07-29 02:36:21 +000051 <listitem>
njn7316df22009-08-04 01:16:01 +000052 <para><command>Massif</command> is a heap profiler. It helps you
njn05a89172009-07-29 02:36:21 +000053 make your programs use less memory.</para>
54 </listitem>
sewardj778d7832007-11-22 01:21:56 +000055
njn05a89172009-07-29 02:36:21 +000056 <listitem>
57 <para><command>Ptrcheck</command> is an experimental heap, stack and
58 global array overrun detector. Its functionality overlaps somewhat
59 with Memcheck's, but it can find some problems that Memcheck would
60 miss.</para>
61 </listitem>
sewardj778d7832007-11-22 01:21:56 +000062
njn05a89172009-07-29 02:36:21 +000063 <listitem>
64 <para><command>BBV</command> is an experimental SimPoint basic block
65 vector generator. It is useful to people doing computer architecture
66 research and development.</para>
67 </listitem>
njn218714b2009-06-02 23:20:40 +000068
njn3e986b22004-11-30 10:43:45 +000069</orderedlist>
70
njn05a89172009-07-29 02:36:21 +000071<para>There are also a couple of minor tools that aren't useful to
72most users: <command>Lackey</command> is an example tool that illustrates
73some instrumentation basics; and <command>Nulgrind</command> is the minimal
74Valgrind tool that does no analysis or instrumentation, and is only useful
75for testing purposes.</para>
njn3e986b22004-11-30 10:43:45 +000076
njn779a2d62005-07-25 00:12:19 +000077<para>Valgrind is closely tied to details of the CPU and operating
78system, and to a lesser extent, the compiler and basic C libraries.
njn05a89172009-07-29 02:36:21 +000079Nonetheless, it supports a number of widely-used platforms, listed in full
80at <ulink url="&vg-url;">&vg-url;</ulink>.</para>
81
82<para>Valgrind is built via the standard Unix
njn3e986b22004-11-30 10:43:45 +000083<computeroutput>./configure</computeroutput>,
84<computeroutput>make</computeroutput>, <computeroutput>make
njn05a89172009-07-29 02:36:21 +000085install</computeroutput> process; full details are given in the
86README file in the distribution.</para>
njn3e986b22004-11-30 10:43:45 +000087
88<para>Valgrind is licensed under the <xref linkend="license.gpl"/>,
debad57fc2005-12-03 22:33:29 +000089version 2. The <computeroutput>valgrind/*.h</computeroutput> headers
90that you may wish to include in your code (eg.
sewardj778d7832007-11-22 01:21:56 +000091<filename>valgrind.h</filename>, <filename>memcheck.h</filename>,
njn218714b2009-06-02 23:20:40 +000092<filename>helgrind.h</filename>, etc.) are
debad57fc2005-12-03 22:33:29 +000093distributed under a BSD-style license, so you may include them in your
94code without worrying about license conflicts. Some of the PThreads
95test cases, <filename>pth_*.c</filename>, are taken from "Pthreads
96Programming" by Bradford Nichols, Dick Buttlar &amp; Jacqueline Proulx
97Farrell, ISBN 1-56592-115-1, published by O'Reilly &amp; Associates,
98Inc.</para>
njn3e986b22004-11-30 10:43:45 +000099
sewardj778d7832007-11-22 01:21:56 +0000100<para>If you contribute code to Valgrind, please ensure your
101contributions are licensed as "GPLv2, or (at your option) any later
102version." This is so as to allow the possibility of easily upgrading
103the license to GPLv3 in future. If you want to modify code in the VEX
njn05a89172009-07-29 02:36:21 +0000104subdirectory, please also see the file VEX/HACKING.README in the
105distribution.</para>
sewardj778d7832007-11-22 01:21:56 +0000106
107
njn3e986b22004-11-30 10:43:45 +0000108</sect1>
109
110
111<sect1 id="manual-intro.navigation" xreflabel="How to navigate this manual">
112<title>How to navigate this manual</title>
113
njn05a89172009-07-29 02:36:21 +0000114<para>This manual's structure reflects the structure of Valgrind itself.
115First, we describe the Valgrind core, how to use it, and the flags
debad57fc2005-12-03 22:33:29 +0000116it supports. Then, each tool has its own chapter in this manual. You
117only need to read the documentation for the core and for the tool(s) you
118actually use, although you may find it helpful to be at least a little
sewardj33878892007-11-17 09:43:25 +0000119bit familiar with what all tools do. If you're new to all this, you probably
njn7316df22009-08-04 01:16:01 +0000120want to run the Memcheck tool and you might find the <xref
121linkend="quick-start"/> useful.</para>
njn3e986b22004-11-30 10:43:45 +0000122
debad57fc2005-12-03 22:33:29 +0000123<para>Be aware that the core understands some command line flags, and
sewardj778d7832007-11-22 01:21:56 +0000124the tools have their own flags which they know about. This means
125there is no central place describing all the flags that are
126accepted -- you have to read the flags documentation both for
debad57fc2005-12-03 22:33:29 +0000127<xref linkend="manual-core"/> and for the tool you want to use.</para>
njn3e986b22004-11-30 10:43:45 +0000128
sewardj778d7832007-11-22 01:21:56 +0000129
njn3e986b22004-11-30 10:43:45 +0000130</sect1>
131
132</chapter>