blob: d652c235456441f000b2632091b2f89014e00766 [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
6<book id="quick-start" xreflabel="Valgrind Quick Start Guide">
7
8 <bookinfo>
9 <title>Valgrind Quick Start Guide</title>
10 </bookinfo>
11
12
13<title>Valgrind Quick Start Guide</title>
14
njn779a2d62005-07-25 00:12:19 +000015<para>The Valgrind distribution has multiple tools. The most popular is the
16memory checking tool (called Memcheck) which can detect many common memory
17errors such as:
njn76c5bfa2005-03-11 04:33:29 +000018</para>
19
20<itemizedlist>
21 <listitem><para>touching memory you shouldn't (eg. overrunning heap block
22 boundaries);</para>
23 </listitem>
24 <listitem><para>using values before they have been initialized;</para>
25 </listitem>
26 <listitem><para>incorrect freeing of memory, such as double-freeing heap
27 blocks;</para>
28 </listitem>
njnffc92b82005-08-15 04:37:34 +000029 <listitem><para>memory leaks.</para>
njn76c5bfa2005-03-11 04:33:29 +000030 </listitem>
31</itemizedlist>
32
33<para>What follows is the minimum information you need to start detecting
34memory errors in your program with Memcheck. Note that this guide applies
njn779a2d62005-07-25 00:12:19 +000035to Valgrind version 2.4.0 and later; some of the information is not quite
36right for earlier versions.</para>
njn76c5bfa2005-03-11 04:33:29 +000037
deccde45e2005-06-12 10:23:23 +000038<sect1 id="quick-start.prepare"
39 xreflabel="Preparing your program">
njn76c5bfa2005-03-11 04:33:29 +000040<title>Preparing your program</title>
41<para>Compile your program with <computeroutput>-g</computeroutput> to include
42debugging information so that Memcheck's error messages include exact line
sewardj053fe982005-11-15 19:51:04 +000043numbers. Using <computeroutput>-O0</computeroutput> is also a good idea, if
44you can tolerate the slowdown. With <computeroutput>-O1</computeroutput>
45line numbers in error messages can inaccurate, although generally speaking
46Memchecking code compiled at <computeroutput>-O1</computeroutput> works
47fairly well. Use of <computeroutput>-O2</computeroutput> and above is
48not recommended as Memcheck occasionally reports uninitialised-value
49errors which don't really exist.</para>
njn76c5bfa2005-03-11 04:33:29 +000050</sect1>
51
deccde45e2005-06-12 10:23:23 +000052<sect1 id="quick-start.mcrun"
53 xreflabel="Running your program under Memcheck">
njn76c5bfa2005-03-11 04:33:29 +000054<title>Running your program under Memcheck</title>
55<para>If you normally run your program like this:
56
57<programlisting>
58 myprog arg1 arg2
59</programlisting>
60
61Use this command line:
62
63<programlisting>
64 valgrind --leak-check=yes myprog arg1 arg2
65</programlisting>
66
67Memcheck is the default tool. The
njn779a2d62005-07-25 00:12:19 +000068<computeroutput>--leak-check</computeroutput> option turns on the detailed
69memory leak detector.</para>
njn76c5bfa2005-03-11 04:33:29 +000070
71<para>Your program will run much slower (eg. 20 to 30 times) than normal,
72and use a lot more memory. Memcheck will issue messages about memory errors
73and leaks that it detects.</para>
74</sect1>
75
deccde45e2005-06-12 10:23:23 +000076<sect1 id="quick-start.interpret"
77 xreflabel="Interpreting Memcheck's output">
njn76c5bfa2005-03-11 04:33:29 +000078<title>Interpreting Memcheck's output</title>
79<para>Here's an example C program with a memory error and a memory leak.
80
81<programlisting>
82 #include &lt;stdlib.h&gt;
83
84 void f(void)
85 {
86 int* x = malloc(10 * sizeof(int));
87 x[10] = 0; // problem 1: heap block overrun
88 } // problem 2: memory leak -- x not freed
89
90 int main(void)
91 {
92 f();
93 return 0;
94 }
95</programlisting>
96
97Most error messages look like the following, which describes problem 1, the
98heap block overrun:
99
100<programlisting>
101 ==19182== Invalid write of size 4
102 ==19182== at 0x804838F: f (example.c:6)
103 ==19182== by 0x80483AB: main (example.c:11)
104 ==19182== Address 0x1BA45050 is 0 bytes after a block of size 40 alloc'd
105 ==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)
106 ==19182== by 0x8048385: f (example.c:5)
107 ==19182== by 0x80483AB: main (example.c:11)
108</programlisting>
109
110Things to notice:
111
112<itemizedlist>
113 <listitem>
114 <para>There is a lot of information in each error message; read it
115 carefully.</para>
116 </listitem>
117
118 <listitem>
119 <para>The 19182 is the process ID; it's usually unimportant.</para>
120 </listitem>
121
122 <listitem>
123 <para>The first line ("Invalid write...") tells you what kind of error it
124 is. Here, the program wrote to some memory it should not have due to a
125 heap block overrun.</para>
126 </listitem>
127
128 <listitem>
129 <para>Below the first line is a stack trace telling you where the problem
130 occurred. Stack traces can get quite large, and be confusing, especially
131 if you are using the C++ STL. Reading them from the bottom up can help.
132 If the stack trace is not big enough, use the
133 <computeroutput>--num-callers</computeroutput> option to make it
134 bigger.</para>
135 </listitem>
136
137 <listitem>
njn1df54d22005-09-27 18:52:39 +0000138 <para>The code addresses (eg. 0x804838F) are usually unimportant, but
139 occasionally crucial for tracking down weirder bugs.</para>
njn76c5bfa2005-03-11 04:33:29 +0000140 </listitem>
141
142 <listitem>
143 <para>Some error messages have a second component which describes the memory
144 address involved. This one shows that the written memory is just past
njn1df54d22005-09-27 18:52:39 +0000145 the end of a block allocated with malloc() on line 5 of example.c.</para>
njn76c5bfa2005-03-11 04:33:29 +0000146 </listitem>
147</itemizedlist>
148
149It's worth fixing errors in the order they are reported, as later
150errors can be caused by earlier errors.</para>
151
152<para>Memory leak messages look like this:
153
154<programlisting>
155 ==19182== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
156 ==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)
njnbb9700d2005-08-15 04:40:57 +0000157 ==19182== by 0x8048385: f (a.c:5)
158 ==19182== by 0x80483AB: main (a.c:11)
njn76c5bfa2005-03-11 04:33:29 +0000159</programlisting>
160
161The stack trace tells you where the leaked memory was allocated.
162Memcheck cannot tell you why the memory leaked, unfortunately. (Ignore the
163"vg_replace_malloc.c", that's an implementation detail.)</para>
164
165<para>There are several kinds of leaks; the two most important categories are:
166
167<itemizedlist>
168 <listitem><para>"definitely lost": your program is leaking memory -- fix
169 it!</para>
170 </listitem>
171
172 <listitem><para>"probably lost": your program is leaking memory, unless
173 you're doing funny things with pointers (such as moving them to point to
174 the middle of a heap block).</para>
175 </listitem>
176</itemizedlist>
177
178If you don't understand an error message, please consult
njn779a2d62005-07-25 00:12:19 +0000179<xref linkend="mc-manual.errormsgs"/> in the <xref linkend="manual"/> which has
njn76c5bfa2005-03-11 04:33:29 +0000180examples of all the error messages Memcheck produces.</para>
181</sect1>
182
deccde45e2005-06-12 10:23:23 +0000183<sect1 id="quick-start.caveats" xreflabel="Caveats">
njn76c5bfa2005-03-11 04:33:29 +0000184<title>Caveats</title>
185<para>Memcheck is not perfect; it occasionally produces false positives,
186and there are mechanisms for suppressing these (see
187<xref linkend="manual-core.suppress"/> in the <xref linkend="manual"/>).
188However, it is typically right 99% of the time, so you should be wary of
189ignoring its error messages. After all, you wouldn't ignore warning
190messages produced by a compiler, right?</para>
191
192<para>Memcheck also cannot detect every memory error your program has. For
193example, it can't detect if you overrun the bounds of an array that is
njn90db4ab2005-08-15 04:44:26 +0000194allocated statically or on the stack. But it should detect every error that
195could crash your program (eg. cause a segmentation fault).</para>
njn76c5bfa2005-03-11 04:33:29 +0000196</sect1>
197
deccde45e2005-06-12 10:23:23 +0000198<sect1 id="quick-start.info" xreflabel="More Information">
njn76c5bfa2005-03-11 04:33:29 +0000199<title>More information</title>
200<para>Please consult the <xref linkend="FAQ"/> and the
201<xref linkend="manual"/>, which have much more information. Note that the
202other tools in the Valgrind distribution can be invoked with the
203<computeroutput>--tool</computeroutput> option.</para>
204</sect1>
205
206</book>