OSDN Git Service

LDP: Update original to LDP v3.79
[linuxjm/LDP_man-pages.git] / original / man3 / mtrace.3
1 .\" Copyright (c) 2012 by Michael Kerrisk <mtk.manpages@gmail.com>
2 .\"
3 .\" %%%LICENSE_START(VERBATIM)
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
7 .\"
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one.
12 .\"
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein.  The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
19 .\" professionally.
20 .\"
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
23 .\" %%%LICENSE_END
24 .\"
25 .TH MTRACE 3 2012-04-18 "GNU" "Linux Programmer's Manual"
26 .SH NAME
27 mtrace, muntrace \- malloc tracing
28 .SH SYNOPSIS
29 .B "#include <mcheck.h>"
30 .sp
31 .B "void mtrace(void);"
32 .sp
33 .B "void muntrace(void);"
34 .SH DESCRIPTION
35 The
36 .BR mtrace ()
37 function installs hook functions for the memory-allocation functions
38 .RB ( malloc (3),
39 .BR realloc (3)
40 .BR memalign (3),
41 .BR free (3)).
42 These hook functions record tracing information about memory allocation
43 and deallocation.
44 The tracing information can be used to discover memory leaks and
45 attempts to free nonallocated memory in a program.
46
47 The
48 .BR muntrace ()
49 function disables the hook functions installed by
50 .BR mtrace (),
51 so that tracing information is no longer recorded
52 for the memory-allocation functions.
53 If no hook functions were successfully installed by
54 .BR mtrace (),
55 .BR muntrace ()
56 does nothing.
57
58 When
59 .BR mtrace ()
60 is called, it checks the value of the environment variable
61 .BR MALLOC_TRACE ,
62 which should contain the pathname of a file in which
63 the tracing information is to be recorded.
64 If the pathname is successfully opened, it is truncated to zero length.
65
66 If
67 .BR MALLOC_TRACE
68 is not set,
69 or the pathname it specifies is invalid or not writable,
70 then no hook functions are installed, and
71 .BR mtrace ()
72 has no effect.
73 In set-user-ID and set-group-ID programs,
74 .BR MALLOC_TRACE
75 is ignored, and
76 .BR mtrace ()
77 has no effect.
78 .SH CONFORMING TO
79 These functions are GNU extensions.
80 .SH NOTES
81 In normal usage,
82 .BR mtrace ()
83 is called once at the start of execution of a program, and
84 .BR muntrace ()
85 is never called.
86
87 The tracing output produced after a call to
88 .BR mtrace ()
89 is textual, but not designed to be human readable.
90 The GNU C library provides a Perl script,
91 .BR mtrace (1),
92 that interprets the trace log and produces human-readable output.
93 For best results,
94 the traced program should be compiled with debugging enabled,
95 so that line-number information is recorded in the executable.
96
97 The tracing performed by
98 .BR mtrace ()
99 incurs a performance penalty (if
100 .B MALLOC_TRACE
101 points to a valid, writable pathname).
102 .SH BUGS
103 The line-number information produced by
104 .BR mtrace (1)
105 is not always precise:
106 the line number references may refer to the previous or following (nonblank)
107 line of the source code.
108 .SH EXAMPLE
109 The shell session below demonstrates the use of the
110 .BR mtrace ()
111 function and the
112 .BR mtrace (1)
113 command in a program that has memory leaks at two different locations.
114 The demonstration uses the following program:
115 .in +4
116 .nf
117
118 .RB "$ " "cat t_mtrace.c"
119 #include <mcheck.h>
120 #include <stdlib.h>
121 #include <stdio.h>
122
123 int
124 main(int argc, char *argv[])
125 {
126     int j;
127
128     mtrace();
129
130     for (j = 0; j < 2; j++)
131         malloc(100);            /* Never freed\-\-a memory leak */
132
133     calloc(16, 16);             /* Never freed\-\-a memory leak */
134     exit(EXIT_SUCCESS);
135 }
136
137 .fi
138 .in
139 When we run the program as follows, we see that
140 .BR mtrace ()
141 diagnosed memory leaks at two different locations in the program:
142 .in +4n
143 .nf
144
145 .RB "$ " "cc \-g t_mtrace.c \-o t_mtrace"
146 .RB "$ " "export MALLOC_TRACE=/tmp/t"
147 .RB "$ " "./t_mtrace"
148 .RB "$ " "mtrace ./t_mtrace $MALLOC_TRACE"
149 Memory not freed:
150 -----------------
151    Address     Size     Caller
152 0x084c9378     0x64  at /home/cecilia/t_mtrace.c:12
153 0x084c93e0     0x64  at /home/cecilia/t_mtrace.c:12
154 0x084c9448    0x100  at /home/cecilia/t_mtrace.c:16
155 .fi
156 .in
157
158 The first two messages about unfreed memory correspond to the two
159 .BR malloc (3)
160 calls inside the
161 .I for
162 loop.
163 The final message corresponds to the call to
164 .BR calloc (3)
165 (which in turn calls
166 .BR malloc (3)).
167 .SH SEE ALSO
168 .BR mtrace (1),
169 .BR malloc (3),
170 .BR malloc_hook (3),
171 .BR mcheck (3)
172 .SH COLOPHON
173 This page is part of release 3.79 of the Linux
174 .I man-pages
175 project.
176 A description of the project,
177 information about reporting bugs,
178 and the latest version of this page,
179 can be found at
180 \%http://www.kernel.org/doc/man\-pages/.