]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/blobdiff - lib/Test/Valgrind/Tool/memcheck.pm
This is 1.17
[perl/modules/Test-Valgrind.git] / lib / Test / Valgrind / Tool / memcheck.pm
index af6f3f0bb98ed39fbfdeca3ac57c7a2495048fd0..542ff9ddff7a3d5adb9526ad151e05ae940f6e7a 100644 (file)
@@ -9,11 +9,11 @@ Test::Valgrind::Tool::memcheck - Run an analysis through the memcheck tool.
 
 =head1 VERSION
 
-Version 1.11
+Version 1.17
 
 =cut
 
-our $VERSION = '1.11';
+our $VERSION = '1.17';
 
 =head1 DESCRIPTION
 
@@ -21,7 +21,7 @@ This class contains the information required by the session for running the C<me
 
 =cut
 
-use base qw/Test::Valgrind::Tool/;
+use base qw<Test::Valgrind::Tool>;
 
 =head1 METHODS
 
@@ -29,13 +29,20 @@ This class inherits L<Test::Valgrind::Tool>.
 
 =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.
 
@@ -51,7 +58,7 @@ sub new {
 
  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;
@@ -65,6 +72,8 @@ sub new_trainer { shift->new(callers => 50) }
 
 =head2 C<callers>
 
+    my $callers = $tvtm->callers;
+
 Read-only accessor for the C<callers> option.
 
 =cut
@@ -73,7 +82,9 @@ sub callers { $_[0]->{callers} }
 
 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.
 
@@ -86,13 +97,17 @@ sub parser_class {
            ? '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.
 
@@ -101,8 +116,12 @@ This tool emits C<Test::Valgrind::Tool::memcheck::Report> object reports in anal
 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 {
@@ -149,7 +168,7 @@ You can find documentation for this module with the perldoc command.
 
 =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.
 
@@ -159,11 +178,11 @@ This program is free software; you can redistribute it and/or modify it under th
 
 package Test::Valgrind::Tool::memcheck::Report;
 
-use base qw/Test::Valgrind::Report/;
+use base qw<Test::Valgrind::Report>;
 
-our $VERSION = '1.11';
+our $VERSION = '1.17';
 
-my @kinds = qw/
+my @kinds = qw<
  InvalidFree
  MismatchedFree
  InvalidRead
@@ -179,7 +198,7 @@ my @kinds = qw/
  Leak_IndirectlyLost
  Leak_PossiblyLost
  Leak_StillReachable
-/;
+>;
 push @kinds, __PACKAGE__->SUPER::kinds();
 
 my %kinds_hashed = map { $_ => 1 } @kinds;
@@ -216,9 +235,9 @@ sub dump {
    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;
    }