blob: 771e06318883503fd68c35f4846cc21e45d46c70 [file] [log] [blame]
njn76c5bfa2005-03-11 04:33:29 +00001<?xml version="1.0"?> <!-- -*- sgml -*- -->
2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
4[ <!ENTITY % vg-entities SYSTEM "vg-entities.xml"> %vg-entities; ]>
5
de252c6142005-11-27 04:10:00 +00006<book id="QuickStart" xreflabel="Valgrind Quick Start Guide">
njn76c5bfa2005-03-11 04:33:29 +00007
de53ad6842005-11-19 03:28:10 +00008<bookinfo>
de9bec93c2005-11-25 05:36:48 +00009 <title>The Valgrind Quick Start Guide</title>
10 <releaseinfo>&rel-type; &rel-version; &rel-date;</releaseinfo>
11 <copyright>
12 <year>&vg-lifespan;</year>
13 <holder><ulink url="&vg-developers;">Valgrind Developers</ulink></holder>
14 </copyright>
debad57fc2005-12-03 22:33:29 +000015 <legalnotice>
16 <para>Email: <ulink url="mailto:&vg-vemail;">&vg-vemail;</ulink></para>
17 </legalnotice>
de53ad6842005-11-19 03:28:10 +000018</bookinfo>
njn76c5bfa2005-03-11 04:33:29 +000019
20
de252c6142005-11-27 04:10:00 +000021<article id="quick-start">
de9bec93c2005-11-25 05:36:48 +000022<title>The Valgrind Quick Start Guide</title>
23
24
25<sect1 id="quick-start.intro" xreflabel="Introduction">
26<title>Introduction</title>
njn76c5bfa2005-03-11 04:33:29 +000027
debad57fc2005-12-03 22:33:29 +000028<para>The Valgrind distribution has multiple tools. The most popular is
29the memory checking tool (called Memcheck) which can detect many common
30memory errors such as:</para>
njn76c5bfa2005-03-11 04:33:29 +000031
32<itemizedlist>
debad57fc2005-12-03 22:33:29 +000033 <listitem>
34 <para>touching memory you shouldn't (eg. overrunning heap block
njn76c5bfa2005-03-11 04:33:29 +000035 boundaries);</para>
debad57fc2005-12-03 22:33:29 +000036 </listitem>
37 <listitem>
38 <para>using values before they have been initialized;</para>
39 </listitem>
40 <listitem>
41 <para>incorrect freeing of memory, such as double-freeing heap
42 blocks;</para>
43 </listitem>
44 <listitem>
45 <para>memory leaks.</para>
46 </listitem>
njn76c5bfa2005-03-11 04:33:29 +000047</itemizedlist>
48
debad57fc2005-12-03 22:33:29 +000049<para>What follows is the minimum information you need to start
50detecting memory errors in your program with Memcheck. Note that this
51guide applies to Valgrind version 2.4.0 and later; some of the
52information is not quite right for earlier versions.</para>
njn76c5bfa2005-03-11 04:33:29 +000053
de9bec93c2005-11-25 05:36:48 +000054</sect1>
55
56
57<sect1 id="quick-start.prepare" xreflabel="Preparing your program">
njn76c5bfa2005-03-11 04:33:29 +000058<title>Preparing your program</title>
de9bec93c2005-11-25 05:36:48 +000059
debad57fc2005-12-03 22:33:29 +000060<para>Compile your program with <option>-g</option> to include debugging
61information so that Memcheck's error messages include exact line
62numbers. Using <computeroutput>-O0</computeroutput> is also a good
63idea, if you can tolerate the slowdown. With
64<computeroutput>-O1</computeroutput> line numbers in error messages can
65be inaccurate, although generally speaking Memchecking code compiled at
66<computeroutput>-O1</computeroutput> works fairly well. Use of
67<computeroutput>-O2</computeroutput> and above is not recommended as
68Memcheck occasionally reports uninitialised-value errors which don't
69really exist.</para>
70
njn76c5bfa2005-03-11 04:33:29 +000071</sect1>
72
de9bec93c2005-11-25 05:36:48 +000073
74<sect1 id="quick-start.mcrun" xreflabel="Running your program under Memcheck">
njn76c5bfa2005-03-11 04:33:29 +000075<title>Running your program under Memcheck</title>
de9bec93c2005-11-25 05:36:48 +000076
njn76c5bfa2005-03-11 04:33:29 +000077<para>If you normally run your program like this:
debad57fc2005-12-03 22:33:29 +000078<programlisting> myprog arg1 arg2
njn76c5bfa2005-03-11 04:33:29 +000079</programlisting>
80
81Use this command line:
debad57fc2005-12-03 22:33:29 +000082<programlisting> valgrind --leak-check=yes myprog arg1 arg2
njn76c5bfa2005-03-11 04:33:29 +000083</programlisting>
84
debad57fc2005-12-03 22:33:29 +000085Memcheck is the default tool. The <option>--leak-check</option> option
86turns on the detailed memory leak detector.</para>
njn76c5bfa2005-03-11 04:33:29 +000087
debad57fc2005-12-03 22:33:29 +000088<para>Your program will run much slower (eg. 20 to 30 times) than
89normal, and use a lot more memory. Memcheck will issue messages about
90memory errors and leaks that it detects.</para>
91
njn76c5bfa2005-03-11 04:33:29 +000092</sect1>
93
de9bec93c2005-11-25 05:36:48 +000094
deccde45e2005-06-12 10:23:23 +000095<sect1 id="quick-start.interpret"
96 xreflabel="Interpreting Memcheck's output">
njn76c5bfa2005-03-11 04:33:29 +000097<title>Interpreting Memcheck's output</title>
98<para>Here's an example C program with a memory error and a memory leak.
99
100<programlisting>
101 #include &lt;stdlib.h&gt;
102
103 void f(void)
104 {
105 int* x = malloc(10 * sizeof(int));
106 x[10] = 0; // problem 1: heap block overrun
107 } // problem 2: memory leak -- x not freed
108
109 int main(void)
110 {
111 f();
112 return 0;
113 }
114</programlisting>
115
debad57fc2005-12-03 22:33:29 +0000116Most error messages look like the following, which describes problem 1,
117the heap block overrun:
njn76c5bfa2005-03-11 04:33:29 +0000118
119<programlisting>
120 ==19182== Invalid write of size 4
121 ==19182== at 0x804838F: f (example.c:6)
122 ==19182== by 0x80483AB: main (example.c:11)
123 ==19182== Address 0x1BA45050 is 0 bytes after a block of size 40 alloc'd
124 ==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)
125 ==19182== by 0x8048385: f (example.c:5)
126 ==19182== by 0x80483AB: main (example.c:11)
127</programlisting>
128
129Things to notice:
130
131<itemizedlist>
debad57fc2005-12-03 22:33:29 +0000132 <listitem>
133 <para>There is a lot of information in each error message; read it
134 carefully.</para>
135 </listitem>
136 <listitem>
137 <para>The 19182 is the process ID; it's usually unimportant.</para>
138 </listitem>
139 <listitem>
140 <para>The first line ("Invalid write...") tells you what kind of
141 error it is. Here, the program wrote to some memory it should not
142 have due to a heap block overrun.</para>
143 </listitem>
144 <listitem>
145 <para>Below the first line is a stack trace telling you where the
146 problem occurred. Stack traces can get quite large, and be
147 confusing, especially if you are using the C++ STL. Reading them
148 from the bottom up can help. If the stack trace is not big enough,
149 use the <option>--num-callers</option> option to make it
150 bigger.</para>
151 </listitem>
152 <listitem>
153 <para>The code addresses (eg. 0x804838F) are usually unimportant, but
154 occasionally crucial for tracking down weirder bugs.</para>
155 </listitem>
156 <listitem>
157 <para>Some error messages have a second component which describes
158 the memory address involved. This one shows that the written memory
159 is just past the end of a block allocated with malloc() on line 5 of
160 example.c.</para>
161 </listitem>
njn76c5bfa2005-03-11 04:33:29 +0000162</itemizedlist>
163
debad57fc2005-12-03 22:33:29 +0000164It's worth fixing errors in the order they are reported, as later errors
165can be caused by earlier errors.</para>
njn76c5bfa2005-03-11 04:33:29 +0000166
167<para>Memory leak messages look like this:
168
169<programlisting>
170 ==19182== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
171 ==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)
njnbb9700d2005-08-15 04:40:57 +0000172 ==19182== by 0x8048385: f (a.c:5)
173 ==19182== by 0x80483AB: main (a.c:11)
njn76c5bfa2005-03-11 04:33:29 +0000174</programlisting>
175
176The stack trace tells you where the leaked memory was allocated.
debad57fc2005-12-03 22:33:29 +0000177Memcheck cannot tell you why the memory leaked, unfortunately. (Ignore
178the "vg_replace_malloc.c", that's an implementation detail.)</para>
njn76c5bfa2005-03-11 04:33:29 +0000179
debad57fc2005-12-03 22:33:29 +0000180<para>There are several kinds of leaks; the two most important
181categories are:
njn76c5bfa2005-03-11 04:33:29 +0000182
183<itemizedlist>
debad57fc2005-12-03 22:33:29 +0000184 <listitem>
185 <para>"definitely lost": your program is leaking memory -- fix
186 it!</para>
187 </listitem>
188 <listitem>
189 <para>"probably lost": your program is leaking memory, unless you're
190 doing funny things with pointers (such as moving them to point to
191 the middle of a heap block).</para>
192 </listitem>
njn76c5bfa2005-03-11 04:33:29 +0000193</itemizedlist>
194
njn2c091b82005-11-18 22:09:47 +0000195If you don't understand an error message, please consult
debad57fc2005-12-03 22:33:29 +0000196<xref linkend="mc-manual.errormsgs"/> in the <xref linkend="manual"/>
197which has examples of all the error messages Memcheck produces.</para>
198
njn76c5bfa2005-03-11 04:33:29 +0000199</sect1>
200
de9bec93c2005-11-25 05:36:48 +0000201
deccde45e2005-06-12 10:23:23 +0000202<sect1 id="quick-start.caveats" xreflabel="Caveats">
njn76c5bfa2005-03-11 04:33:29 +0000203<title>Caveats</title>
de9bec93c2005-11-25 05:36:48 +0000204
njn76c5bfa2005-03-11 04:33:29 +0000205<para>Memcheck is not perfect; it occasionally produces false positives,
njn2c091b82005-11-18 22:09:47 +0000206and there are mechanisms for suppressing these (see
njn76c5bfa2005-03-11 04:33:29 +0000207<xref linkend="manual-core.suppress"/> in the <xref linkend="manual"/>).
208However, it is typically right 99% of the time, so you should be wary of
209ignoring its error messages. After all, you wouldn't ignore warning
debad57fc2005-12-03 22:33:29 +0000210messages produced by a compiler, right? The suppression mechanism is
211also useful if Memcheck is reporting errors in library code that you
212cannot change; the default suppression set hides a lot of these, but you
213may come across more.</para>
njn76c5bfa2005-03-11 04:33:29 +0000214
debad57fc2005-12-03 22:33:29 +0000215<para>Memcheck also cannot detect every memory error your program has.
216For example, it can't detect if you overrun the bounds of an array that
217is allocated statically or on the stack. But it should detect every
218error that could crash your program (eg. cause a segmentation
219fault).</para>
220
njn76c5bfa2005-03-11 04:33:29 +0000221</sect1>
222
de9bec93c2005-11-25 05:36:48 +0000223
deccde45e2005-06-12 10:23:23 +0000224<sect1 id="quick-start.info" xreflabel="More Information">
njn76c5bfa2005-03-11 04:33:29 +0000225<title>More information</title>
de9bec93c2005-11-25 05:36:48 +0000226
debad57fc2005-12-03 22:33:29 +0000227<para>Please consult the <xref linkend="FAQ"/> and the
228<xref linkend="manual"/>, which have much more information. Note that
229the other tools in the Valgrind distribution can be invoked with the
230<option>--tool</option> option.</para>
231
njn76c5bfa2005-03-11 04:33:29 +0000232</sect1>
233
de9bec93c2005-11-25 05:36:48 +0000234
235</article>
njn76c5bfa2005-03-11 04:33:29 +0000236</book>