NAME
Devel::Valgrind::Client - Make valgrind memcheck client requests
SYNOPSIS
# Run the following code under Valgrind
use Devel::Valgrind::Client qw(leak_check);
my $result = leak_check {
# Code to check here.
# The following two lines are deliberately leaky:
my $x = "a" x 1_000;
Internals::SvREFCNT($x, 2); # Don't do this in real code, please
};
# Should print just over 1000 (i.e. SvLEN + sizeof(SVPV))
warn "Lost $result->{leaked} bytes";
DESCRIPTION
Valgrind provides the ability for a program that is running under Valgrind's memcheck tool ("being valgrinded") to make requests to the Valgrind VM through macros defined in <valgrind/memcheck.h
>.
This module provides a way to access some of these calls from Perl, such as to find out if a program is running under memcheck, to force a leak check operation and retrieve statistics of the check.
The reason this module was created was to test XS code does not leak, however note that for many cases Test::Valgrind will be a better choice. The difference compared to Test::Valgrind is this runs within the same process; it is your responsibility to arrange for the program to run under Valgrind.
(Potentially it can also be used to count how many bytes are allocated -- by deliberately leaking memory -- although there are other choices for that, such as Devel::Mallinfo)
To compile this module you will need Valgrind installed, as it uses a header file Valgrind provides.
EXPORTS
Nothing by default. The following are available by request:
leak_check($coderef)
A high level interface.
The steps performed are as follows:
Request memcheck to run a leak check and record the statistics.
Run the code reference given as an argument.
Request memcheck to perform a leak check again and take the values that were reported previously from the leak statistics.
The return value is as per
/count_leaks
, with the statistics adjusted appropriately.is_in_memcheck
Returns true if perl is running under memcheck, false otherwise.
count_leaks
Returns a hash reference: leaked dubious reachable suppressed
count_leaks_blocks
do_leak_check
do_leak_check_quick
LICENSE
This program is free software. It comes without any warranty, to the extent permitted by applicable law. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING or Software::License::WTFPL_2 for more details.
AUTHOR
David Leadbeater <dgl@dgl.cx>, 2010