blob: 7b5d5026f195ee68b72b42dd48ab727913552e64 [file] [log] [blame]
sewardj9829e382005-05-24 14:17:41 +00001
2As of May 2005, Valgrind can produce its output in XML form. The
3intention is to provide an easily parsed, stable format which is
4suitable for GUIs to read.
5
6
7Design goals
8~~~~~~~~~~~~
9
10* Produce XML output which is easily parsed
11
12* Have a stable output format which does not change much over time, so
13 that investments in parser-writing by GUI developers is not lost as
14 new versions of Valgrind appear.
15
16* Have an extensive output format, so that future changes to the
17 format do not break backwards compatibility with existing parsers of
18 it.
19
20* Produce output in a form which suitable for both offline GUIs (run
21 all the way to the end, then examine output) and interactive GUIs
22 (parse XML incrementally, update display as we go).
23
24* Put as much information as possible into the XML and let the GUIs
25 decide what to show the user (a.k.a provide mechanism, not policy).
26
sewardj57d99c52005-06-13 16:44:33 +000027* Make XML which is actually parseable by standard XML tools.
28
sewardj9829e382005-05-24 14:17:41 +000029
30How to use
31~~~~~~~~~~
32
dee6ca7bd2005-08-03 18:58:45 +000033Run with flag --xml=yes. That`s all. Note however several
sewardj9829e382005-05-24 14:17:41 +000034caveats.
35
36* At the present time only Memcheck is supported. The scheme extends
njn1d0825f2006-03-27 11:37:07 +000037 easily enough to cover Helgrind if needed.
sewardj9829e382005-05-24 14:17:41 +000038
39* When XML output is selected, various other settings are made.
40 This is in order that the output format is more controlled.
41 The settings which are changed are:
42
43 - Suppression generation is disabled, as that would require user
44 input.
45
46 - Attaching to GDB is disabled for the same reason.
47
48 - The verbosity level is set to 1 (-v).
49
50 - Error limits are disabled. Usually if the program generates a lot
51 of errors, Valgrind slows down and eventually stops collecting
52 them. When outputting XML this is not the case.
53
54 - VEX emulation warnings are not shown.
55
56 - File descriptor leak checking is disabled. This could be
57 re-enabled at some future point.
58
59 - Maximum-detail leak checking is selected (--leak-check=full).
60
61
62The output format
63~~~~~~~~~~~~~~~~~
sewardj9e7212f2005-05-24 15:00:55 +000064For the most part this should be self descriptive. It is printed in a
65sort-of human-readable way for easy understanding. You may want to
66read the rest of this together with the results of "valgrind --xml=yes
67memcheck/tests/xml1" as an example.
sewardj9829e382005-05-24 14:17:41 +000068
69All tags are balanced: a <foo> tag is always closed by </foo>. Hence
70in the description that follows, mention of a tag <foo> implicitly
71means there is a matching closing tag </foo>.
72
73Symbols in CAPITALS are nonterminals in the grammar and are defined
74somewhere below. The root nonterminal is TOPLEVEL.
75
76The following nonterminals are not described further:
77 INT is a 64-bit signed decimal integer.
78 TEXT is arbitrary text.
sewardj9e7212f2005-05-24 15:00:55 +000079 HEX64 is a 64-bit hexadecimal number, with leading "0x".
sewardj9829e382005-05-24 14:17:41 +000080
sewardj57d99c52005-06-13 16:44:33 +000081Text strings are escaped so as to remove the <, > and & characters
82which would otherwise mess up parsing. They are replaced respectively
83with the standard encodings "&lt;", "&gt;" and "&amp;" respectively.
84Note this is not (yet) done throughout, only for function names in
85<frame>..</frame> tags-pairs.
86
sewardj9829e382005-05-24 14:17:41 +000087
88TOPLEVEL
89--------
sewardj57d99c52005-06-13 16:44:33 +000090
91The first line output is always this:
92
93 <?xml version="1.0"?>
94
95All remaining output is contained within the tag-pair
96<valgrindoutput>.
sewardj9829e382005-05-24 14:17:41 +000097
98Inside that, the first entity is an indication of the protocol
99version. This is provided so that existing parsers can identify XML
100created by future versions of Valgrind merely by observing that the
dee6ca7bd2005-08-03 18:58:45 +0000101protocol version is one they don`t understand. Hence TOPLEVEL is:
sewardj9829e382005-05-24 14:17:41 +0000102
sewardj8665d8e2005-06-01 17:35:23 +0000103 <?xml version="1.0"?>
sewardj9829e382005-05-24 14:17:41 +0000104 <valgrindoutput>
105 <protocolversion>INT<protocolversion>
sewardj6a5a69c2005-11-17 00:51:36 +0000106 PROTOCOL
sewardj9829e382005-05-24 14:17:41 +0000107 </valgrindoutput>
108
sewardjb8b79ad2008-03-03 01:35:41 +0000109Valgrind versions 3.0.0 and 3.0.1 emit protocol version 1. Versions
1103.1.X and 3.2.X emit protocol version 2.
111
112
113PROTOCOL for version 3
114----------------------
115Changes in 3.3.X (tentative): (jrs, 1 March 2008)
116
117* There may be more than one <logfilequalifier> clause, depending on
118 how this pans out. (AshleyP perhaps to investigate)
119
120* Some errors may have two <auxwhat> blocks, rather than just one
121 (resulting from merge of the DATASYMS branch)
sewardj9829e382005-05-24 14:17:41 +0000122
123
sewardj6a5a69c2005-11-17 00:51:36 +0000124PROTOCOL for version 2
125----------------------
126Version 2 is identical in every way to version 1, except that the time
127string in
128
129 <time>human-readable-time-string</time>
130
131has changed format, and is also elapsed wallclock time since process
132start, and not local time or any such. In fact version 1 does not
133define the format of the string so in some ways this revision is
134irrelevant.
135
136
137PROTOCOL for version 1
138----------------------
sewardj9829e382005-05-24 14:17:41 +0000139This is the main top-level construction. Roughly speaking, it
140contains a load of preamble, the errors from the run of the
141program, and the result of the final leak check. Hence the
142following in sequence:
143
144* Various preamble lines which give version info for the various
145 components. The text in them can be anything; it is not intended
146 for interpretation by the GUI:
147
sewardj57d99c52005-06-13 16:44:33 +0000148 <preamble>
149 <line>Misc version/copyright text</line> (zero or more of)
150 </preamble>
sewardj9829e382005-05-24 14:17:41 +0000151
152* The PID of this process and of its parent:
153
154 <pid>INT</pid>
155 <ppid>INT</ppid>
156
157* The name of the tool being used:
158
159 <tool>TEXT</tool>
160
sewardjad311162005-07-19 11:25:02 +0000161* OPTIONALLY, if --log-file-qualifier=VAR flag was given:
162
163 <logfilequalifier> <var>VAR</var> <value>$VAR</value>
164 </logfilequalifier>
165
166 That is, both the name of the environment variable and its value
167 are given.
njn374a36d2007-11-23 01:41:32 +0000168 [update: as of v3.3.0, this is not present, as the --log-file-qualifier
169 option has been removed, replaced by the %q format specifier in --log-file.]
sewardjad311162005-07-19 11:25:02 +0000170
sewardje5e1f822005-07-19 14:59:41 +0000171* OPTIONALLY, if --xml-user-comment=STRING was given:
172
173 <usercomment>STRING</usercomment>
174
175 STRING is not escaped in any way, so that it itself may be a piece
176 of XML with arbitrary tags etc.
177
sewardjb8a3dac2005-07-19 12:39:11 +0000178* The program and args: first those pertaining to Valgrind itself, and
179 then those pertaining to the program to be run under Valgrind (the
180 client):
sewardj9829e382005-05-24 14:17:41 +0000181
sewardjb8a3dac2005-07-19 12:39:11 +0000182 <args>
183 <vargv>
184 <exe>TEXT</exe>
185 <arg>TEXT</arg> (zero or more of)
186 </vargv>
187 <argv>
188 <exe>TEXT</exe>
189 <arg>TEXT</arg> (zero or more of)
190 </argv>
191 </args>
sewardj9829e382005-05-24 14:17:41 +0000192
193* The following, indicating that the program has now started:
194
sewardj33e60422005-07-24 07:33:15 +0000195 <status> <state>RUNNING</state>
196 <time>human-readable-time-string</time>
sewardj68cde6f2005-07-19 12:17:51 +0000197 </status>
sewardj9829e382005-05-24 14:17:41 +0000198
199* Zero or more of (either ERROR or ERRORCOUNTS).
200
201* The following, indicating that the program has now finished, and
202 that the wrapup (leak checking) is happening.
203
sewardj33e60422005-07-24 07:33:15 +0000204 <status> <state>FINISHED</state>
205 <time>human-readable-time-string</time>
sewardj68cde6f2005-07-19 12:17:51 +0000206 </status>
sewardj9829e382005-05-24 14:17:41 +0000207
208* SUPPCOUNTS, indicating how many times each suppression was used.
209
210* Zero or more ERRORs, each of which is a complaint from the
211 leak checker.
212
sewardj6a5a69c2005-11-17 00:51:36 +0000213That's it.
sewardj9829e382005-05-24 14:17:41 +0000214
215
216ERROR
217-----
218This shows an error, and is the most complex nonterminal. The format
219is as follows:
220
221 <error>
222 <unique>HEX64</unique>
223 <tid>INT</tid>
224 <kind>KIND</kind>
225 <what>TEXT</what>
226
227 optionally: <leakedbytes>INT</leakedbytes>
228 optionally: <leakedblocks>INT</leakedblocks>
229
230 STACK
231
232 optionally: <auxwhat>TEXT</auxwhat>
233 optionally: STACK
234
235 </error>
236
237* Each error contains a unique, arbitrary 64-bit hex number. This is
238 used to refer to the error in ERRORCOUNTS nonterminals (see below).
239
240* The <tid> tag indicates the Valgrind thread number. This value
241 is arbitrary but may be used to determine which threads produced
242 which errors (at least, the first instance of each error).
243
244* The <kind> tag specifies one of a small number of fixed error
245 types (enumerated below), so that GUIs may roughly categorise
246 errors by type if they want.
247
248* The <what> tag gives a human-understandable description of the
249 error.
250
251* For <kind> tags specifying a KIND of the form "Leak_*", the
252 optional <leakedbytes> and <leakedblocks> indicate the number of
253 bytes and blocks leaked by this error.
254
255* The primary STACK for this error, indicating where it occurred.
256
257* Some error types may have auxiliary information attached:
258
259 <auxwhat>TEXT</auxwhat> gives an auxiliary human-readable
260 description (usually of invalid addresses)
261
262 STACK gives an auxiliary stack (usually the allocation/free
263 point of a block). If this STACK is present then
264 <auxwhat>TEXT</auxwhat> will precede it.
265
266
267KIND
268----
269This is a small enumeration indicating roughly the nature of an error.
270The possible values are:
271
272 InvalidFree
273
274 free/delete/delete[] on an invalid pointer
275
276 MismatchedFree
277
278 free/delete/delete[] does not match allocation function
279 (eg doing new[] then free on the result)
280
281 InvalidRead
282
283 read of an invalid address
284
285 InvalidWrite
286
287 write of an invalid address
288
289 InvalidJump
290
291 jump to an invalid address
292
293 Overlap
294
295 args overlap other otherwise bogus in eg memcpy
296
297 InvalidMemPool
298
299 invalid mem pool specified in client request
300
301 UninitCondition
302
303 conditional jump/move depends on undefined value
304
305 UninitValue
306
307 other use of undefined value (primarily memory addresses)
308
309 SyscallParam
310
311 system call params are undefined or point to
312 undefined/unaddressible memory
313
314 ClientCheck
315
316 "error" resulting from a client check request
317
318 Leak_DefinitelyLost
319
320 memory leak; the referenced blocks are definitely lost
321
322 Leak_IndirectlyLost
323
324 memory leak; the referenced blocks are lost because all pointers
325 to them are also in leaked blocks
326
327 Leak_PossiblyLost
328
329 memory leak; only interior pointers to referenced blocks were
330 found
331
332 Leak_StillReachable
333
334 memory leak; pointers to un-freed blocks are still available
335
336
337STACK
338-----
339STACK indicates locations in the program being debugged. A STACK
340is one or more FRAMEs. The first is the innermost frame, the
341next its caller, etc.
342
343 <stack>
344 one or more FRAME
345 </stack>
346
347
348FRAME
349-----
350FRAME records a single program location:
351
352 <frame>
353 <ip>HEX64</ip>
354 optionally <obj>TEXT</obj>
355 optionally <fn>TEXT</fn>
sewardj57d99c52005-06-13 16:44:33 +0000356 optionally <dir>TEXT</dir>
sewardj9829e382005-05-24 14:17:41 +0000357 optionally <file>TEXT</file>
358 optionally <line>INT</line>
359 </frame>
360
361Only the <ip> field is guaranteed to be present. It indicates a
362code ("instruction pointer") address.
363
364The optional fields, if present, appear in the order stated:
365
366* obj: gives the name of the ELF object containing the code address
367
368* fn: gives the name of the function containing the code address
369
sewardj57d99c52005-06-13 16:44:33 +0000370* dir: gives the source directory associated with the name specified
371 by <file>. Note the current implementation often does not
372 put anything useful in this field.
373
sewardj9829e382005-05-24 14:17:41 +0000374* file: gives the name of the source file containing the code address
375
376* line: gives the line number in the source file
377
378
379ERRORCOUNTS
380-----------
381This specifies, for each error that has been so far presented,
382the number of occurrences of that error.
383
384 <errorcounts>
385 zero or more of
386 <pair> <count>INT</count> <unique>HEX64</unique> </pair>
387 </errorcounts>
388
389Each <pair> gives the current error count <count> for the error with
390unique tag </unique>. The counts do not have to give a count for each
391error so far presented - partial information is allowable.
392
sewardj9e7212f2005-05-24 15:00:55 +0000393As at Valgrind rev 3793, error counts are only emitted at program
sewardj9829e382005-05-24 14:17:41 +0000394termination. However, it is perfectly acceptable to periodically emit
395error counts as the program is running. Doing so would facilitate a
396GUI to dynamically update its error-count display as the program runs.
397
398
399SUPPCOUNTS
400----------
401A SUPPCOUNTS block appears exactly once, after the program terminates.
402It specifies the number of times each error-suppression was used.
403Suppressions not mentioned were used zero times.
404
405 <suppcounts>
406 zero or more of
sewardj7c9e57c2005-05-24 14:21:45 +0000407 <pair> <count>INT</count> <name>TEXT</name> </pair>
sewardj9829e382005-05-24 14:17:41 +0000408 </suppcounts>
409
410The <name> is as specified in the suppression name fields in .supp
411files.
sewardj57d99c52005-06-13 16:44:33 +0000412