]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Started overhauling the documentation:
authorNicholas Nethercote <njn@valgrind.org>
Wed, 29 Jul 2009 02:36:21 +0000 (02:36 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Wed, 29 Jul 2009 02:36:21 +0000 (02:36 +0000)
- There were detailed descriptions of all the tools in the Quick Start
  Guide, the Manual introduction, and the start of each tool chapter.  To
  avoid duplication/overlap, I removed these altogether from the Quick Start
  Guide, and shortened them in the intro.

- Improved the description of what errors Memcheck can find.

- Made all tool chapters start with "Overview" section, for consistency.

- Made the "run with --tool=XXX" bit consistent in each tool chapter.

- Made all tool chapter titles match the description given when running them.

- Added BBV to the User Manual intro.

- Generally clarified, updated, and future-proofed various bits of text in
  the Quick Start Guide and User Manual introduction.

Also:
- Changed Nulgrind's start-up description to "the minimal Valgrind tool".

- Fixed some punctuation in the usage message.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10652

18 files changed:
cachegrind/docs/cg-manual.xml
callgrind/docs/cl-manual.xml
coregrind/m_main.c
docs/xml/manual-intro.xml
docs/xml/manual-writing-tools.xml
docs/xml/quick-start-guide.xml
drd/docs/drd-manual.xml
exp-bbv/docs/bbv-manual.xml
exp-ptrcheck/docs/pc-manual.xml
helgrind/docs/hg-manual.xml
lackey/docs/lk-manual.xml
massif/docs/ms-manual.xml
memcheck/docs/mc-manual.xml
none/docs/nl-manual.xml
none/nl_main.c
none/tests/cmdline1.stdout.exp
none/tests/cmdline2.stdout.exp
none/tests/filter_stderr

index 512eeb409bf48682af6e3e9b33c10af62c578346..1b37a50ea3e1408107ef6f093fb9a7e50aaea572 100644 (file)
@@ -4,27 +4,22 @@
 [ <!ENTITY % vg-entities SYSTEM "../../docs/xml/vg-entities.xml"> %vg-entities; ]>
 
 
-<chapter id="cg-manual" xreflabel="Cachegrind: a cache-miss profiler">
-<title>Cachegrind: a cache and branch profiler</title>
-
-<sect1 id="cg-manual.cache" xreflabel="Cache profiling">
-<title>Cache and branch profiling</title>
+<chapter id="cg-manual" xreflabel="Cachegrind: a cache and branch-prediction profiler">
+<title>Cachegrind: a cache and branch-prediction profiler</title>
 
 <para>To use this tool, you must specify
 <computeroutput>--tool=cachegrind</computeroutput> on the
 Valgrind command line.</para>
 
-<para>Cachegrind is a tool for finding places where programs
-interact badly with typical modern superscalar processors
-and run slowly as a result.
-In particular, it will do a cache simulation of your program,
-and optionally a branch-predictor simulation, and can
-then annotate your source line-by-line with the number of cache
-misses and branch mispredictions.  The following statistics are 
-collected:</para>
+<sect1 id="cg-manual.overview" xreflabel="Overview">
+<title>Overview</title>
+
+<para>Cachegrind simulates how your program interacts with a machine's cache
+hierarchy and (optionally) branch predictor.  It gathers the following
+statistics:</para>
 <itemizedlist>
   <listitem>
-    <para>L1 instruction cache reads and misses;</para>
+    <para>L1 instruction cache reads and read misses;</para>
   </listitem>
   <listitem>
     <para>L1 data cache reads and read misses, writes and write
@@ -44,24 +39,28 @@ collected:</para>
   </listitem>
 </itemizedlist>
 
+<para>These statistics are presented for the entire program and for each
+function in the program.  You can also annotate each line of source code in
+the program with the counts that were caused directly by it.</para>
+
 <para>On a modern machine, an L1 miss will typically cost
 around 10 cycles, an L2 miss can cost as much as 200
 cycles, and a mispredicted branch costs in the region of 10
 to 30 cycles.  Detailed cache and branch profiling can be very useful
-for improving the performance of your program.</para>
+for understanding how your program interacts with the machine and thus how
+to make it faster.</para>
 
 <para>Also, since one instruction cache read is performed per
 instruction executed, you can find out how many instructions are
-executed per line, which can be useful for traditional profiling
-and test coverage.</para>
+executed per line, which can be useful for traditional profiling.</para>
 
 <para>Branch profiling is not enabled by default.  To use it, you must
 additionally specify <computeroutput>--branch-sim=yes</computeroutput>
 on the command line.</para>
 
 
-<sect2 id="cg-manual.overview" xreflabel="Overview">
-<title>Overview</title>
+<sect2 id="cg-manual.basics" xreflabel="Basics">
+<title>Basics</title>
 
 <para>First off, as for normal Valgrind use, you probably want to
 compile with debugging info (the
@@ -169,7 +168,7 @@ follows:</para>
 
 <para>The cache configuration simulated (cache size,
 associativity and line size) is determined automagically using
-the CPUID instruction.  If you have an old machine that (a)
+the x86 CPUID instruction.  If you have an machine that (a)
 doesn't support the CPUID instruction, or (b) supports it in an
 early incarnation that doesn't give any cache information, then
 Cachegrind will fall back to using a default configuration (that
index e94d4e953eb71973b39717b43c6b94b1891f3e6a..2f3d9f65d7deba40ec845a5614da3ba48cac23d3 100644 (file)
@@ -4,9 +4,13 @@
 [ <!ENTITY % cl-entities SYSTEM "cl-entities.xml"> %cl-entities; ]>
 
 <chapter id="cl-manual" xreflabel="Callgrind Manual">
-<title>Callgrind: a call graph profiler</title>
+<title>Callgrind: a call-graph generating cache profiler</title>
 
 
+<para>To use this tool, you must specify
+<computeroutput>--tool=callgrind</computeroutput> on the
+Valgrind command line.</para>
+
 <sect1 id="cl-manual.use" xreflabel="Overview">
 <title>Overview</title>
 
index 4fd5311b4baa93ed0029699c45ddc8012da6bd1a..b5c8f50ef575035b6660c7d1793e2023575b4919 100644 (file)
@@ -212,8 +212,8 @@ static void usage_NORETURN ( Bool debug_help )
 "  Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc\n"
 "\n"
 "  %s is %s\n"
-"  Valgrind is Copyright (C) 2000-2009, and GNU GPL'd, by Julian Seward et al\n"
-"  LibVEX is Copyright (C) 2004-2009, and GNU GPL'd, by OpenWorks LLP\n"
+"  Valgrind is Copyright (C) 2000-2009, and GNU GPL'd, by Julian Seward et al.\n"
+"  LibVEX is Copyright (C) 2004-2009, and GNU GPL'd, by OpenWorks LLP.\n"
 "\n"
 "  Bug reports, feedback, admiration, abuse, etc, to: %s.\n"
 "\n";
index db64191d23546a805818f657c45dda30766be2ad..569d05e6761c1a00b63ed4f132a3c2d39b982501 100644 (file)
@@ -1,6 +1,7 @@
 <?xml version="1.0"?> <!-- -*- sgml -*- -->
 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
-  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
+[ <!ENTITY % vg-entities SYSTEM "vg-entities.xml"> %vg-entities; ]>
 
 <chapter id="manual-intro" xreflabel="Introduction">
 <title>Introduction</title>
 <sect1 id="manual-intro.overview" xreflabel="An Overview of Valgrind">
 <title>An Overview of Valgrind</title>
 
-<para>Valgrind is a suite of simulation-based debugging and profiling
-tools for programs running on Linux (x86, amd64, ppc32 and ppc64).
-The system consists of a core, which provides a synthetic CPU in
-software, and a set of tools, each of which performs some kind of
-debugging, profiling, or similar task.  The architecture is modular,
-so that new tools can be created easily and without disturbing the
-existing structure.</para>
+<para>Valgrind is an instrumentation framework for building dynamic analysis
+tools.  It comes with a set of tools each of which performs some kind of
+debugging, profiling, or similar task that helps you improve your programs.
+Valgrind's architecture is modular, so new tools can be created easily
+and without disturbing the existing structure.</para>
 
-<para>A number of useful tools are supplied as standard.  In
-summary, these are:</para>
+<para>A number of useful tools are supplied as standard.</para>
 
 <orderedlist>
 
   <listitem>
-    <para><command>Memcheck</command> detects memory-management problems
-    in programs.  All reads and writes of memory are checked, and
-    calls to malloc/new/free/delete are intercepted. As a result,
-    Memcheck can detect the following problems:</para>
-
-    <itemizedlist>
-     <listitem>
-      <para>Use of uninitialised memory</para>
-     </listitem>
-     <listitem>
-      <para>Reading/writing memory after it has been
-      free'd</para>
-     </listitem>
-     <listitem>
-      <para>Reading/writing off the end of malloc'd
-      blocks</para>
-     </listitem>
-     <listitem>
-      <para>Reading/writing inappropriate areas on the
-      stack</para>
-     </listitem>
-     <listitem>
-      <para>Memory leaks -- where pointers to malloc'd
-      blocks are lost forever</para>
-     </listitem>
-     <listitem>
-      <para>Mismatched use of malloc/new/new [] vs
-      free/delete/delete []</para>
-      </listitem>
-     <listitem>
-      <para>Overlapping <computeroutput>src</computeroutput> and
-      <computeroutput>dst</computeroutput> pointers in
-      <computeroutput>memcpy()</computeroutput> and related
-      functions</para></listitem> 
-    </itemizedlist>
-
-    <para>Problems like these can be difficult to find by other means,
-    often remaining undetected for long periods, then causing occasional,
-    difficult-to-diagnose crashes.</para>
-   </listitem>
+    <para><command>Memcheck</command> is a memory error detector.  It helps
+    you make your programs, particularly those written in C and C++, more
+    correct.</para>
+  </listitem>
  
-   <listitem>
-    <para><command>Cachegrind</command> is a cache profiler.  It
-    performs detailed simulation of the I1, D1 and L2 caches in your CPU
-    and so can accurately pinpoint the sources of cache misses in your
-    code.  It will show the number of cache misses,
-    memory references and instructions accruing to each line of source
-    code, with per-function, per-module and whole-program summaries.  If
-    you ask really nicely it will even show counts for each individual
-    machine instruction.</para>
-
-    <para>On x86 and and64, Cachegrind auto-detects your machine's cache
-    configuration using the <computeroutput>CPUID</computeroutput>
-    instruction, and so needs no further configuration info, in most
-    cases.</para>
-   </listitem>
-
-   <listitem>
-     <para><command>Callgrind</command> is a profiler similar in
-     concept to Cachegrind, but which also tracks caller-callee
-     relationships.  By doing so it is able to show how instruction,
-     memory reference and cache miss costs flow between callers and
-     callees.  Callgrind collects a large amount of data which is best
-     navigated using Josef Weidendorfer's amazing KCachegrind
-     visualisation tool (<ulink
-     url="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindIndex">http://kcachegrind.sourceforge.net</ulink>).
-     KCachegrind is a KDE application which presents 
-     these profiling results in a
-     graphical and easy-to-understand form.</para>
-   </listitem>
-
-   <listitem>
-     <para><command>Helgrind</command> detects synchronisation errors
-     in programs that use the POSIX pthreads threading primitives.  It
-     detects the following three classes of errors:</para>
-
-     <itemizedlist>
-      <listitem>
-        <para>Misuses of the POSIX pthreads API.</para>
-      </listitem>
-      <listitem>
-        <para>Potential deadlocks arising from lock ordering
-        problems.</para>
-      </listitem>
-      <listitem>
-       <para>Data races -- accessing memory without adequate locking.</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>Problems like these often result in unreproducible,
-    timing-dependent crashes, deadlocks and other misbehaviour, and
-    can be difficult to find by other means.</para>
-   </listitem>
-
-   <listitem>
-     <para><command>DRD</command> is similar to Helgrind, but uses a
-     different analysis technique and so may find different problems.
-     </para>
-   </listitem>
-
-   <listitem>
-     <para><command>Massif</command> is a heap profiler.
-     It measures how much heap memory programs use.  In particular,
-     it can give you information about heap blocks, heap 
-     administration overheads, and stack sizes.</para>
-
-     <para>Heap profiling can help you reduce the amount of
-     memory your program uses.  On modern machines with virtual
-     memory, this reduces the chances that your program will run out
-     of memory, and may make it faster by reducing the amount of
-     paging needed.</para>
-   </listitem>
-
-   <listitem>
-     <para><command>Ptrcheck</command> is an experimental pointer checking
-     tool.  Its functionality overlaps somewhat with Memcheck's, but it can
-     find some problems that Memcheck would miss.</para>
-   </listitem>
+  <listitem>
+    <para><command>Cachegrind</command> is a cache and branch-prediction
+    profiler.  It can help you make your programs run faster.</para>
+  </listitem>
+
+  <listitem>
+    <para><command>Callgrind</command> is a call-graph generating cache
+    profiler.  It has some overlap with Cachegrind, but also gathers some
+    information that Cachegrind does not.</para>
+  </listitem>
+
+  <listitem>
+    <para><command>Helgrind</command> is a thread error detector.
+    It can help you make your multi-threaded programs more correct.
+    </para>
+  </listitem>
+
+  <listitem>
+    <para><command>DRD</command> is also a thread error detector.  It is
+    similar to Helgrind but uses different analysis techniques and so may
+    find different problems.</para>
+  </listitem>
 
+  <listitem>
+    <para><command>Massif</command> is a heap profiler.  It can help you
+    make your programs use less memory.</para>
+  </listitem>
+
+  <listitem>
+    <para><command>Ptrcheck</command> is an experimental heap, stack and
+    global array overrun detector.  Its functionality overlaps somewhat
+    with Memcheck's, but it can find some problems that Memcheck would
+    miss.</para>
+  </listitem>
+
+  <listitem>
+    <para><command>BBV</command> is an experimental SimPoint basic block
+    vector generator.  It is useful to people doing computer architecture
+    research and development.</para>
+  </listitem>
 
 </orderedlist>
   
-
-<para>A couple of minor tools (<command>Lackey</command> and
-<command>Nulgrind</command>) are also supplied.  These aren't
-particularly useful -- they exist to illustrate how to create simple
-tools and to help the valgrind developers in various ways.  Nulgrind is
-the null tool -- it adds no instrumentation.  Lackey is a simple example
-tool which counts instructions, memory accesses, and the number of
-integer and floating point operations your program does.</para>
+<para>There are also a couple of minor tools that aren't useful to
+most users:  <command>Lackey</command> is an example tool that illustrates
+some instrumentation basics; and <command>Nulgrind</command> is the minimal
+Valgrind tool that does no analysis or instrumentation, and is only useful
+for testing purposes.</para>
 
 <para>Valgrind is closely tied to details of the CPU and operating
 system, and to a lesser extent, the compiler and basic C libraries.
-Nonetheless, as of version 3.3.0 it supports several platforms:
-x86/Linux (mature), amd64/Linux (maturing), ppc32/Linux and
-ppc64/Linux (less mature but work well).  There is also experimental
-support for ppc32/AIX5 and ppc64/AIX5 (AIX 5.2 and 5.3 only).
-Valgrind uses the standard Unix
+Nonetheless, it supports a number of widely-used platforms, listed in full
+at <ulink url="&vg-url;">&vg-url;</ulink>.</para>
+
+<para>Valgrind is built via the standard Unix
 <computeroutput>./configure</computeroutput>,
 <computeroutput>make</computeroutput>, <computeroutput>make
-install</computeroutput> mechanism, and we have attempted to ensure that
-it works on machines with Linux kernel 2.4.X or 2.6.X and glibc
-2.2.X to 2.7.X.</para>
+install</computeroutput> process;  full details are given in the
+README file in the distribution.</para>
 
 <para>Valgrind is licensed under the <xref linkend="license.gpl"/>,
 version 2.  The <computeroutput>valgrind/*.h</computeroutput> headers
@@ -182,7 +101,8 @@ Inc.</para>
 contributions are licensed as "GPLv2, or (at your option) any later
 version."  This is so as to allow the possibility of easily upgrading
 the license to GPLv3 in future.  If you want to modify code in the VEX
-subdirectory, please also see VEX/HACKING.README.</para>
+subdirectory, please also see the file VEX/HACKING.README in the
+distribution.</para>
 
 
 </sect1>
@@ -191,11 +111,8 @@ subdirectory, please also see VEX/HACKING.README.</para>
 <sect1 id="manual-intro.navigation" xreflabel="How to navigate this manual">
 <title>How to navigate this manual</title>
 
-<para>The Valgrind distribution consists of the Valgrind core, upon
-which are built Valgrind tools.  The tools do different kinds of debugging
-and profiling.  This manual is structured similarly.</para>
-
-<para>First, we describe the Valgrind core, how to use it, and the flags
+<para>This manual's structure reflects the structure of Valgrind itself.
+First, we describe the Valgrind core, how to use it, and the flags
 it supports.  Then, each tool has its own chapter in this manual.  You
 only need to read the documentation for the core and for the tool(s) you
 actually use, although you may find it helpful to be at least a little
@@ -209,9 +126,8 @@ there is no central place describing all the flags that are
 accepted -- you have to read the flags documentation both for
 <xref linkend="manual-core"/> and for the tool you want to use.</para>
 
-<para>The manual is quite big and complex.  If you are looking for a
-quick getting-started guide, have a look at
-<xref linkend="quick-start"/>.</para>
+<para>The manual is quite big and complex.  If you want to start using
+Valgrind more quickly, read <xref linkend="quick-start"/>.</para>
 
 </sect1>
 
index fd386d8a2b229d59e9ad88847e3d1ef3a544d5e6..789fb2dd9eba440bec5de6e1d50cc6c9ddf45ad6 100644 (file)
@@ -11,7 +11,7 @@
 <title>Introduction</title>
 
 So you want to write a Valgrind tool?  Here are some instructions that may
-help.  They were last updated for Valgrind 3.2.2.
+help.
 
 <sect2 id="writing-tools.tools" xreflabel="Tools">
 <title>Tools</title>
index fbb1cd6d0990b0b9a0982c029996c45495008ecd..465df3d1006fd732b334e9cc801746108418f507 100644 (file)
 <title>Introduction</title>
 
 <para>The Valgrind tool suite provides a number of debugging and
-profiling tools.  The most popular is
-Memcheck, a memory checking tool which can detect many common
-memory errors such as:</para>
+profiling tools that help you make your programs faster and more correct.
+The most popular of these tools is called Memcheck.  It can detect many
+memory-related errors that are common in C and C++ programs and that can
+lead to crashes and unpredictable behaviour.</para>
 
-<itemizedlist>
-  <listitem>
-    <para>Touching memory you shouldn't (eg. overrunning heap block
-    boundaries, or reading/writing freed memory).</para>
-  </listitem>
-  <listitem>
-    <para>Using values before they have been initialized.</para>
-  </listitem>
-  <listitem>
-    <para>Incorrect freeing of memory, such as double-freeing heap
-    blocks.</para>
-  </listitem>
-  <listitem>
-    <para>Memory leaks.</para>
-  </listitem>
-</itemizedlist>
-
-<para>Memcheck is only one of the tools in the Valgrind suite.
-Other tools you may find useful are:</para>
-
-<itemizedlist>
-  <listitem>
-    <para>Cachegrind: a profiling tool which produces detailed data on
-    cache (miss) and branch (misprediction) events.  Statistics are
-    gathered for the entire program, for each function, and for each
-    line of code, if you need that level of detail.</para>
-  </listitem>
-  <listitem>
-    <para>Callgrind: a profiling tool that shows cost relationships
-    across function calls, optionally with cache simulation similar to
-    Cachegrind.  Information gathered by Callgrind can be viewed
-    either with an included command line tool, or by using the
-    KCachegrind GUI.  KCachegrind is not part of the Valgrind suite 
-    -- it is part of the KDE Desktop Environment.</para>
-  </listitem>
-  <listitem>
-    <para>Massif: a space profiling tool.  It allows you to explore
-    in detail which parts of your program allocate memory.</para>
-  </listitem>
-  <listitem>
-    <para>Helgrind: a debugging tool for threaded programs.  Helgrind
-    looks for various kinds of synchronisation errors in code that uses
-    the POSIX PThreads API.</para>
-  </listitem>
-  <listitem>
-    <para>In addition, there are a number of "experimental" tools in
-    the codebase.  They can be distinguished by the "exp-" prefix on
-    their names.  Experimental tools are not subject to the same
-    quality control standards that apply to our production-grade tools
-    (Memcheck, Cachegrind, Callgrind, Massif, Helgrind and DRD).</para>
-  </listitem>
-</itemizedlist>
-
-<para>The rest of this guide discusses only the Memcheck tool.  For
-full documentation on the other tools, and for Memcheck, see the
-Valgrind User Manual.</para>
-
-<para>What follows is the minimum information you need to start
-detecting memory errors in your program with Memcheck.  Note that this
-guide applies to Valgrind version 3.4.0 and later.  Some of the
-information is not quite right for earlier versions.</para>
+<para>The rest of this guide gives the minimum information you need to start
+detecting memory errors in your program with Memcheck.  For full
+documentation of Memcheck and the other tools, please read the User Manual.
+</para>
 
 </sect1>
 
@@ -103,9 +47,9 @@ information so that Memcheck's error messages include exact line
 numbers.  Using <computeroutput>-O0</computeroutput> is also a good
 idea, if you can tolerate the slowdown.  With
 <computeroutput>-O1</computeroutput> line numbers in error messages can
-be inaccurate, although generally speaking Memchecking code compiled at
-<computeroutput>-O1</computeroutput> works fairly well and is
-recommended.  Use of
+be inaccurate, although generally speaking running Memcheck on code compiled
+at <computeroutput>-O1</computeroutput> works fairly well.
+Use of
 <computeroutput>-O2</computeroutput> and above is not recommended as
 Memcheck occasionally reports uninitialised-value errors which don't
 really exist.</para>
@@ -137,8 +81,8 @@ memory errors and leaks that it detects.</para>
 <sect1 id="quick-start.interpret" 
        xreflabel="Interpreting Memcheck's output">
 <title>Interpreting Memcheck's output</title>
-<para>Here's an example C program with a memory error and a memory
-leak.</para>
+<para>Here's an example C program, in a file called a.c, with a memory error
+and a memory leak.</para>
 
 <programlisting>
   #include &lt;stdlib.h&gt;
@@ -237,12 +181,13 @@ categories are:</para>
   </listitem>
 </itemizedlist>
 
-<para>It can be difficult to track down the root causes of
-uninitialised-value errors reported by Memcheck.  Try using
-the <option>--track-origins=yes</option> to get extra information.
-This makes Memcheck run slower, but the extra information you get
-often saves a lot of time figuring out where the uninitialised values
-are coming from.</para>
+<para>Memcheck also reports uses of uninitialised values, most commonly with
+the message "Conditional jump or move depends on uninitialised
+value(s)".  It can be difficult to determine the root cause of these errors.
+Try using the <option>--track-origins=yes</option> to get extra information.
+This makes Memcheck run slower, but the extra information you get often
+saves a lot of time figuring out where the uninitialised values are coming
+from.</para>
 
 <para>If you don't understand an error message, please consult
 <xref linkend="mc-manual.errormsgs"/> in the <xref linkend="manual"/>
@@ -275,8 +220,8 @@ errors.  Once you achieve this state, it is much easier to see when
 changes to the program cause Memcheck to report new errors.
 Experience from several years of Memcheck use shows that it is
 possible to make even huge programs run Memcheck-clean.  For example,
-large parts of KDE 3.5.X, and recent versions of OpenOffice.org
-(2.3.0) are Memcheck-clean, or very close to it.</para>
+large parts of KDE, OpenOffice.org and Firefox are Memcheck-clean, or very
+close to it.</para>
 
 
 </sect1>
index ee49ac7a7483313a48d6f5cb2fb3d45f7fa75330..18c1fb93958bfced5828e895c2985cc9b7a34fa6 100644 (file)
@@ -13,7 +13,7 @@ on the Valgrind command line.</para>
 
 
 <sect1 id="drd-manual.overview" xreflabel="Overview">
-<title>Background</title>
+<title>Overview</title>
 
 <para>
 DRD is a Valgrind tool for detecting errors in multithreaded C and C++
index a699a5f5d571aeec921d604e8f532e00673410aa..25d7a467d709eeb9f9a1f7a72dd9c5db0d7d7973 100644 (file)
@@ -3,14 +3,14 @@
   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 
 <chapter id="bbv-manual" xreflabel="BBV">
-  <title>BBV: a Basic Block Vector generation tool</title>
+  <title>BBV: an experimental basic block vector generation tool</title>
 
 <para>To use this tool, you must specify
 <computeroutput>--tool=exp-bbv</computeroutput> on the Valgrind
 command line.</para>
 
-<sect1 id="bbv-manual.background" xreflabel="BBV Background">
-<title>Basic Block Profiling and SimPoint</title>
+<sect1 id="bbv-manual.overview" xreflabel="Overview">
+<title>Overview</title>
 
 <para>
    A Basic Blocks Vector (BBV) is a list of all basic blocks entered
@@ -20,7 +20,7 @@ command line.</para>
 </para>
 
 <para>
-   This tool was written to generate basic block vectors
+   BBV is tool that generates basic block vectors
    for use with the SimPoint analysis tool 
    (http://www.cse.ucsd.edu/~calder/simpoint/).
    The SimPoint methodology enables speeding up architectural 
@@ -39,14 +39,14 @@ command line.</para>
   In computer architecture research, running a 
   benchmark on a cycle-accurate simulator can cause slowdowns on the order
   of 1000 times, making it take days, weeks, or even longer to run full
-  benchmarks.  By utilizing SimPoint this can be reduced significantly
-  while still retaining reasonable accuracy, usually in the 5-10% range.
+  benchmarks.  By utilizing SimPoint this can be reduced significantly,
+  usually by 90-95%, while still retaining reasonable accuracy.
 </para>
 
 <para>
    A more complete introduction to how SimPoint works can be 
    found in the paper "Automatically Characterizing Large Scale 
-   Program Behavior" by T. Sherwood, E Perelman, G. Hamerly, and 
+   Program Behavior" by T. Sherwood, E. Perelman, G. Hamerly, and 
    B. Calder.  
 </para>
 
index f3d142d81c4de01964c8b6706ce422e447282913..3ce5ca0bd3f861d4e1f74fe3cf803eed74e791ad 100644 (file)
@@ -5,8 +5,8 @@
 
 
 <chapter id="pc-manual" 
-         xreflabel="Ptrcheck: an (experimental) pointer checking tool">
-  <title>Ptrcheck: an (experimental) pointer checking tool</title>
+         xreflabel="Ptrcheck: an experimental heap, stack &amp; global array overrun detector">
+  <title>Ptrcheck: an experimental heap, stack &amp; global array overrun detector</title>
 
 <para>To use this tool, you must specify
 <computeroutput>--tool=exp-ptrcheck</computeroutput> on the Valgrind
@@ -18,7 +18,7 @@ command line.</para>
 <sect1 id="pc-manual.overview" xreflabel="Overview">
 <title>Overview</title>
 
-<para>Ptrcheck is a Valgrind tool for finding overruns of heap, stack
+<para>Ptrcheck is a tool for finding overruns of heap, stack
 and global arrays.  Its functionality overlaps somewhat with
 Memcheck's, but it is able to catch invalid accesses in a number of
 cases that Memcheck would miss.  A detailed comparison against
index 2a0348fb4855de75f05bd483c5c0af39dd8fe29d..bd7d5650eb6e6d28c40053cb6560df81bee218bb 100644 (file)
@@ -12,8 +12,6 @@
 command line.</para>
 
 
-
-
 <sect1 id="hg-manual.overview" xreflabel="Overview">
 <title>Overview</title>
 
@@ -26,14 +24,6 @@ sharing a common address space, thread creation, thread joining,
 thread exit, mutexes (locks), condition variables (inter-thread event
 notifications), reader-writer locks, semaphores and barriers.</para>
 
-<para>Helgrind is aware of all these abstractions and tracks their
-effects as accurately as it can.  Currently it does not correctly
-handle pthread spinlocks, although it will not object if you use them.
-Adding support for spinlocks would be easy enough if the demand arises.
-On x86 and amd64 platforms, it understands and partially handles
-implicit locking arising from the use of the LOCK instruction prefix.
-</para>
-
 <para>Helgrind can detect three classes of errors, which are discussed
 in detail in the next three sections:</para>
 
@@ -58,6 +48,19 @@ in detail in the next three sections:</para>
  </listitem>
 </orderedlist>
 
+<para>Problems like these often result in unreproducible,
+timing-dependent crashes, deadlocks and other misbehaviour, and
+can be difficult to find by other means.</para>
+
+<para>Helgrind is aware of all the pthread abstractions and tracks their
+effects as accurately as it can.  Currently it does not correctly
+handle pthread spinlocks, although it will not object if you use them.
+Adding support for spinlocks would be easy enough if the demand arises.
+On x86 and amd64 platforms, it understands and partially handles
+implicit locking arising from the use of the LOCK instruction prefix.
+</para>
+
+
 <para>Following those is a section containing 
 <link linkend="hg-manual.effective-use">
 hints and tips on how to get the best out of Helgrind.</link>
index 028035a739b88fc0425ec5f2ffb5fb50cb01b348..9a10425a6f3d6d1a0b799183580cda24b1466a30 100644 (file)
@@ -4,7 +4,7 @@
 
 <chapter id="lk-manual" xreflabel="Lackey">
 
-<title>Lackey: a simple profiler and memory tracer</title>
+<title>Lackey: an example tool</title>
 
 <para>To use this tool, you must specify
 <computeroutput>--tool=lackey</computeroutput> on the Valgrind
index 0b98091a58353f6726abd4bedc85a4a5b0c5f4d0..4fc94593b4101c2ca4d110f02e1ff2f5f7bbb213 100644 (file)
@@ -7,21 +7,16 @@
 <chapter id="ms-manual" xreflabel="Massif: a heap profiler">
   <title>Massif: a heap profiler</title>
 
-<emphasis>Please note that this documentation describes Massif version 3.3.0
-and later.  Massif was significantly overhauled for 3.3.0;  versions 3.2.3
-and earlier presented the profiling information an a quite different manner,
-and so this documentation only pertains to the later versions.</emphasis>
-
 <para>To use this tool, you must specify
 <computeroutput>--tool=massif</computeroutput> on the Valgrind
 command line.</para>
 
-<sect1 id="ms-manual.spaceprof" xreflabel="Heap profiling">
-<title>Heap profiling</title>
+<sect1 id="ms-manual.overview" xreflabel="Overview">
+<title>Overview</title>
 
 <para>Massif is a heap profiler.  It measures how much heap memory your
 program uses.  This includes both the useful space, and the extra bytes
-allocated for book-keeping purposes and alignment purposes.  It can also
+allocated for book-keeping and alignment purposes.  It can also
 measure the size of your program's stack(s), although it does not do so by
 default.</para>
 
index 24c5be0d0fd528d7531d6c0762ed2f89064fd8d5..8014ce4e07e69de42525114f77d6be459f6a5d5e 100644 (file)
@@ -3,55 +3,56 @@
           "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 
 
-<chapter id="mc-manual" xreflabel="Memcheck: a heavyweight memory checker">
-<title>Memcheck: a heavyweight memory checker</title>
+<chapter id="mc-manual" xreflabel="Memcheck: a memory error detector">
+<title>Memcheck: a memory error detector</title>
 
 <para>To use this tool, you may specify <option>--tool=memcheck</option>
 on the Valgrind command line.  You don't have to, though, since Memcheck
 is the default tool.</para>
 
 
-<sect1 id="mc-manual.bugs" 
-       xreflabel="Kinds of bugs that Memcheck can find">
-<title>Kinds of bugs that Memcheck can find</title>
+<sect1 id="mc-manual.overview" xreflabel="Overview">
+<title>Overview</title>
 
-<para>Memcheck is Valgrind's heavyweight memory checking tool.  All
-reads and writes of memory are checked, and calls to
-<function>malloc</function>/<computeroutput>new</computeroutput>/<function>free</function>/<computeroutput>delete</computeroutput>
-are intercepted. As a result, Memcheck can detect the following
-problems:</para>
+<para>Memcheck is a memory error detector.  It can detect the following
+problems that are common in C and C++ programs.</para>
 
 <itemizedlist>
   <listitem>
-    <para>Use of uninitialised memory</para>
-  </listitem>
-  <listitem>
-    <para>Reading/writing memory after it has been free'd</para>
-  </listitem>
-  <listitem>
-    <para>Reading/writing off the end of malloc'd blocks</para>
-  </listitem>
-  <listitem>
-    <para>Reading/writing inappropriate areas on the stack</para>
+    <para>Accessing memory you shouldn't, e.g. overrunning and underrunning
+    heap blocks, overrunning the top of the stack, and accessing memory after
+    it has been freed.</para>
   </listitem>
+
   <listitem>
-    <para>Memory leaks - where pointers to malloc'd blocks are
-   lost forever</para>
+    <para>Using undefined values, i.e. values that have not been initialised,
+    or that have been derived from other undefined values.</para>
   </listitem>
+
   <listitem>
-    <para>Mismatched use of
+    <para>Incorrect freeing of heap memory, such as double-freeing heap
+    blocks, or mismatched use of
     <function>malloc</function>/<computeroutput>new</computeroutput>/<computeroutput>new[]</computeroutput>
     versus
     <function>free</function>/<computeroutput>delete</computeroutput>/<computeroutput>delete[]</computeroutput></para>
   </listitem>
+
   <listitem>
     <para>Overlapping <computeroutput>src</computeroutput> and
     <computeroutput>dst</computeroutput> pointers in
-    <function>memcpy()</function> and related
-    functions</para>
+    <computeroutput>memcpy()</computeroutput> and related
+    functions.</para>
+  </listitem>
+
+  <listitem>
+    <para>Memory leaks.</para>
   </listitem>
 </itemizedlist>
 
+<para>Problems like these can be difficult to find by other means,
+often remaining undetected for long periods, then causing occasional,
+difficult-to-diagnose crashes.</para>
+
 </sect1>
 
 
index 2cd06e46585a4a6ec4cca33850e4d2c222de1d73..547f70248bc7b57c4da9f65bdc4a5527c45ade09 100644 (file)
@@ -5,18 +5,26 @@
 
 <chapter id="nl-manual" xreflabel="Nulgrind">
 
-<title>Nulgrind: the "null" tool</title>
-<subtitle>A tool that does not very much at all</subtitle>
+<title>Nulgrind: the minimal Valgrind tool</title>
 
-<para>Nulgrind is the minimal tool for Valgrind.  It does no
-initialisation or finalisation, and adds no instrumentation to
-the program's code.  It is mainly of use for Valgrind's
-developers for debugging and regression testing.</para>
+<para>To use this tool, you must specify
+<computeroutput>--tool=none</computeroutput> on the Valgrind
+command line.</para>
+
+<sect1 id="ms-manual.overview" xreflabel="Overview">
+<title>Overview</title>
+
+<para>Nulgrind is the simplest possible Valgrind tool.  It performs no
+instrumentation or analysis of a program, just runs it normally.  It is
+mainly of use for Valgrind's developers for debugging and regression
+testing.</para>
 
 <para>Nonetheless you can run programs with Nulgrind.  They will run
 roughly 5 times more slowly than normal, for no useful effect.  Note
 that you need to use the option <option>--tool=none</option> to run
 Nulgrind (ie. not <option>--tool=nulgrind</option>).</para>
 
+</sect1>
+
 </chapter>
 
index 0ace001879483367d569581ad5ef0129d3154bd5..cb029bb3e42960726a12ffb2ccf560182848f27f 100644 (file)
@@ -1,11 +1,11 @@
 
 /*--------------------------------------------------------------------*/
-/*--- Nulgrind: The null tool.                           nl_main.c ---*/
+/*--- Nulgrind: The minimal Valgrind tool.               nl_main.c ---*/
 /*--------------------------------------------------------------------*/
 
 /*
-   This file is part of Nulgrind, the simplest possible Valgrind tool,
-   which does nothing.
+   This file is part of Nulgrind, the minimal Valgrind tool,
+   which does no instrumentation or analysis.
 
    Copyright (C) 2002-2009 Nicholas Nethercote
       njn@valgrind.org
@@ -53,7 +53,7 @@ static void nl_pre_clo_init(void)
 {
    VG_(details_name)            ("Nulgrind");
    VG_(details_version)         (NULL);
-   VG_(details_description)     ("a binary JIT-compiler");
+   VG_(details_description)     ("the minimal Valgrind tool");
    VG_(details_copyright_author)(
       "Copyright (C) 2002-2009, and GNU GPL'd, by Nicholas Nethercote.");
    VG_(details_bug_reports_to)  (VG_BUGS_TO);
index f7c55642c865c93b7e4b6db89a4eb4e9f20b2e86..6c9a4742120e353e0314f178a4220af45f6ba0f1 100644 (file)
@@ -56,8 +56,8 @@ usage: valgrind [options] prog-and-args
   Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc
 
   Nulgrind is Copyright (C) 2002-2009, and GNU GPL'd, by Nicholas Nethercote.
-  Valgrind is Copyright (C) 2000-2009, and GNU GPL'd, by Julian Seward et al
-  LibVEX is Copyright (C) 2004-2009, and GNU GPL'd, by OpenWorks LLP
+  Valgrind is Copyright (C) 2000-2009, and GNU GPL'd, by Julian Seward et al.
+  LibVEX is Copyright (C) 2004-2009, and GNU GPL'd, by OpenWorks LLP.
 
   Bug reports, feedback, admiration, abuse, etc, to: www.valgrind.org.
 
index 9ebe49ed8fa9f666e99e8f4db6b78a4a41e01a0a..98dd177ef6b5411951cb468dad5ba92c67a787b7 100644 (file)
@@ -101,8 +101,8 @@ usage: valgrind [options] prog-and-args
   Extra options read from ~/.valgrindrc, $VALGRIND_OPTS, ./.valgrindrc
 
   Nulgrind is Copyright (C) 2002-2009, and GNU GPL'd, by Nicholas Nethercote.
-  Valgrind is Copyright (C) 2000-2009, and GNU GPL'd, by Julian Seward et al
-  LibVEX is Copyright (C) 2004-2009, and GNU GPL'd, by OpenWorks LLP
+  Valgrind is Copyright (C) 2000-2009, and GNU GPL'd, by Julian Seward et al.
+  LibVEX is Copyright (C) 2004-2009, and GNU GPL'd, by OpenWorks LLP.
 
   Bug reports, feedback, admiration, abuse, etc, to: www.valgrind.org.
 
index adb76265ea649c48405e20bbab74241c2f84aee7..80855df7c36613163f2562c05ce882cd438d1a41 100755 (executable)
@@ -5,7 +5,7 @@ dir=`dirname $0`
 $dir/../../tests/filter_stderr_basic |
 
 # Remove "Nulgrind, ..." line and the following copyright line.
-sed "/^Nulgrind, a binary JIT-compiler./ , /./ d" |
+sed "/^Nulgrind, the minimal Valgrind tool./ , /./ d" |
 
 # Anonymise addresses
 $dir/../../tests/filter_addresses