=head1 VERSION
-Version 1.10
+Version 1.17
=cut
-our $VERSION = '1.10';
+our $VERSION = '1.17';
=head1 DESCRIPTION
=cut
-use base qw/Test::Valgrind::Tool/;
+use base qw<Test::Valgrind::Tool>;
=head1 METHODS
=head2 C<requires_version>
+ my $required_version = $tvt->requires_version;
+
This tool requires C<valgrind> C<3.1.0>.
=cut
sub requires_version { '3.1.0' }
-=head2 C<< new callers => $callers, ... >>
+=head2 C<new>
+
+ my $tvtm = Test::Valgrind::Tool::memcheck->new(
+ callers => $callers,
+ %extra_args,
+ );
Your usual constructor.
my %args = @_;
- my $callers = delete $args{callers} || 12;
+ my $callers = delete $args{callers} || 50;
$callers =~ s/\D//g;
my $self = bless $class->Test::Valgrind::Tool::new(%args), $class;
=head2 C<callers>
+ my $callers = $tvtm->callers;
+
Read-only accessor for the C<callers> option.
=cut
sub suppressions_tag { 'memcheck-' . $_[1]->version }
-=head2 C<parser_class $session>
+=head2 C<parser_class>
+
+ my $parser_class = $tvtm->parser_class($session);
This tool uses a L<Test::Valgrind::Parser::XML::Twig> parser in analysis mode, and a L<Test::Valgrind::Parser::Suppressions::Text> parser in suppressions mode.
? 'Test::Valgrind::Parser::Suppressions::Text'
: 'Test::Valgrind::Parser::XML::Twig';
- local $@;
- eval "require $class";
+ {
+ local $@;
+ eval "require $class; 1" or die $@;
+ }
return $class;
}
-=head2 C<report_class $session>
+=head2 C<report_class>
+
+ my $report_class = $tvtm->report_class($session);
This tool emits C<Test::Valgrind::Tool::memcheck::Report> object reports in analysis mode, and C<Test::Valgrind::Report::Suppressions> object reports in suppressions mode.
sub report_class {
my ($self, $session) = @_;
- $session->do_suppressions ? 'Test::Valgrind::Report::Suppressions'
- : 'Test::Valgrind::Tool::memcheck::Report'
+ if ($session->do_suppressions) {
+ require Test::Valgrind::Parser::Suppressions::Text;
+ return 'Test::Valgrind::Report::Suppressions';
+ } else {
+ return 'Test::Valgrind::Tool::memcheck::Report';
+ }
}
sub args {
=head1 COPYRIGHT & LICENSE
-Copyright 2009 Vincent Pit, all rights reserved.
+Copyright 2009,2010,2011,2013,2015 Vincent Pit, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
package Test::Valgrind::Tool::memcheck::Report;
-use base qw/Test::Valgrind::Report/;
+use base qw<Test::Valgrind::Report>;
-our $VERSION = '1.10';
+our $VERSION = '1.17';
-my @kinds = qw/
+my @kinds = qw<
InvalidFree
MismatchedFree
InvalidRead
Leak_IndirectlyLost
Leak_PossiblyLost
Leak_StillReachable
-/;
+>;
push @kinds, __PACKAGE__->SUPER::kinds();
my %kinds_hashed = map { $_ => 1 } @kinds;
my ($ip, $obj, $fn, $dir, $file, $line) = map { (defined) ? $_ : '?' } @$_;
my $frame;
if ($fn eq '?' and $obj eq '?') {
- $ip =~ s/^0x//g;
- $ip = hex $ip;
- $frame = sprintf "0x%0${pad}X", $ip;
+ $ip =~ s/^0x//gi;
+ my $l = length $ip;
+ $frame = '0x' . ($l < $pad ? ('0' x ($pad - $l)) : '') . uc($ip);
} else {
$frame = sprintf '%s (%s) [%s:%s]', $fn, $obj, $file, $line;
}