2 Test::Valgrind - Generate suppressions, analyse and test any command
9 # From the command-line
10 perl -MTest::Valgrind leaky.pl
12 # From the command-line, snippet style
13 perl -MTest::Valgrind -e 'leaky()'
17 eval 'use Test::Valgrind';
18 plan skip_all => 'Test::Valgrind is required to test your distribution with valgrind' if $@;
21 # In all the test files of a directory
22 prove --exec 'perl -Iblib/lib -Iblib/arch -MTest::Valgrind' t/*.t
25 This module is a front-end to the "Test::Valgrind::*" API that lets you
26 run Perl code through the "memcheck" tool of the "valgrind" memory
27 debugger, to test it for memory errors and leaks. If they aren't
28 available yet, it will first generate suppressions for the current
29 "perl" interpreter and store them in the portable flavour of
30 ~/.perl/Test-Valgrind/suppressions/$VERSION. The actual run will then
31 take place, and tests will be passed or failed according to the result
34 The complete API is much more versatile than this. It allows you to run
35 *any* executable under valgrind, generate the corresponding suppressions
36 and convert the analysis output to TAP so that it can be incorporated
37 into your project's testsuite.
39 Due to the nature of perl's memory allocator, this module can't track
40 leaks of Perl objects. This includes non-mortalized scalars and memory
41 cycles. However, it can track leaks of chunks of memory allocated in XS
42 extensions with "Newx" and friends or "malloc". As such, it's
43 complementary to the other very good leak detectors listed in the "SEE
47 "analyse [ %options ]"
48 Run a "valgrind" analysis configured by %options :
50 * "command => $command"
52 The Test::Valgrind::Command object (or class name) to use.
54 Defaults to Test::Valgrind::Command::PerlScript.
58 The Test::Valgrind::Tool object (or class name) to use.
60 Defaults to Test::Valgrind::Tool::memcheck.
64 The Test::Valgrind::Action object (or class name) to use.
66 Defaults to Test::Valgrind::Action::Test.
70 The file name of the script to analyse.
72 Ignored if you supply your own custom "command", but mandatory
75 * "callers => $number"
77 Specify the maximum stack depth studied when valgrind encounters an
78 error. Raising this number improves granularity.
80 Ignored if you supply your own custom "tool", otherwise defaults to
85 If true, print the output of the test script as diagnostics.
87 Ignored if you supply your own custom "action", otherwise defaults
90 * "extra_supps => \@files"
92 Also use suppressions from @files besides "perl"'s.
96 * "no_def_supp => $bool"
98 If true, do not use the default suppression file.
102 "import [ %options ]"
103 In the parent process, "import" calls "analyse" with the arguments it
104 received itself - except that if no "file" option was supplied, it tries
105 to pick the first caller context that looks like a script. When the
106 analyse ends, it exits with the status that was returned.
108 In the child process, it just "return"s so that the calling code is
109 actually run under "valgrind".
113 When set to true, all dynamic extensions that were loaded during the
114 analysis will be unloaded at "END" time by "dl_unload_file" in
117 Since this obfuscates error stack traces, it's disabled by default.
120 Perl 5.8 is notorious for leaking like there's no tomorrow, so the
121 suppressions are very likely not to be very accurate on it. Anyhow,
122 results will most likely be better if your perl is built with debugging
123 enabled. Using the latest "valgrind" available will also help.
125 This module is not really secure. It's definitely not taint safe. That
126 shouldn't be a problem for test files.
128 What your tests output to "STDOUT" and "STDERR" is eaten unless you pass
129 the "diag" option, in which case it will be reprinted as diagnostics.
132 XML::Twig, version, File::HomeDir, Env::Sanctify, Perl::Destruct::Level.
135 All the "Test::Valgrind::*" API, including Test::Valgrind::Command,
136 Test::Valgrind::Tool, Test::Valgrind::Action and
137 Test::Valgrind::Session.
139 The valgrind(1) man page.
143 Devel::Leak, Devel::LeakTrace, Devel::LeakTrace::Fast.
146 Vincent Pit, "<perl at profvince.com>", <http://www.profvince.com>.
148 You can contact me by mail or on "irc.perl.org" (vincent).
151 Please report any bugs or feature requests to "bug-test-valgrind at
152 rt.cpan.org", or through the web interface at
153 <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Valgrind>. I will
154 be notified, and then you'll automatically be notified of progress on
155 your bug as I make changes.
158 You can find documentation for this module with the perldoc command.
160 perldoc Test::Valgrind
163 Rafaƫl Garcia-Suarez, for writing and instructing me about the
164 existence of Perl::Destruct::Level (Elizabeth Mattijsen is a close
167 H.Merijn Brand, for daring to test this thing.
169 All you people that showed interest in this module, which motivated me
170 into completely rewriting it.
173 Copyright 2008-2009 Vincent Pit, all rights reserved.
175 This program is free software; you can redistribute it and/or modify it
176 under the same terms as Perl itself.