Devel-Gladiator

 view release on metacpan or  search on metacpan

lib/Devel/Gladiator.pm  view on Meta::CPAN

=encoding UTF-8

=head1 NAME

Devel::Gladiator - Walk Perl's arena

=head1 VERSION

version 0.08

=head1 SYNOPSIS

  use Devel::Gladiator qw(walk_arena arena_ref_counts arena_table);

  my $all = walk_arena();

  foreach my $sv ( @$all ) {
      warn "live object: $sv\n";
  }

  warn arena_table(); # prints counts keyed by class

  # how to spot new entries in the arena after running some code
  use Devel::Gladiator qw(walk_arena);
  my %dump1 = map { ("$_" => $_) } @{walk_arena()};
  # do something
  my %dump2 = map { $dump1{$_} ? () : ("$_" => $_) } @{walk_arena()};
  use Devel::Peek; Dump \%dump2;

=head1 DESCRIPTION

L<Devel::Gladiator> iterates Perl's internal memory structures and can be used
to enumerate all the currently live SVs.

This can be used to hunt leaks and to profile memory usage.

=head1 EXPORTS

=head2 walk_arena

Returns an array reference containing all the live SVs. Note that this will
include a reference back to itself, so you should manually clear this array
(via C<@$arena = ()>) when you are done with it, if you don't want to create a
memory leak.

=head2 arena_ref_counts

=for stopwords reftype

Returns a hash keyed by class and reftype of all the live SVs.

This is a convenient way to find out how many objects of a given class exist at
a certain point.

=head2 arena_table

Formats a string table based on C<arena_ref_counts> suitable for printing.

=head1 LIMITATIONS

This code may not work on perls 5.6.x and 5.8.x if L<PadWalker> is installed.
(Patches gratefully accepted!)

=head1 SEE ALSO

=over 4

=item *

L<Become a hero plumber|http://blog.woobling.org/2009/05/become-hero-plumber.html>

=item *

L<Test::Memory::Cycle>

=item *

L<Devel::Cycle>

=item *

L<Devel::Refcount>

=item *

L<Devel::Leak>

=item *

L<Data::Structure::Util>

=back

=head1 SUPPORT

Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=Devel-Gladiator>
(or L<bug-Devel-Gladiator@rt.cpan.org|mailto:bug-Devel-Gladiator@rt.cpan.org>).

=head1 AUTHOR

Artur Bergman <sky@apple.com>

=head1 CONTRIBUTORS

=for stopwords Karen Etheridge יובל קוג'מן (Yuval Kogman) Jesse Luehrs Brad Fitzpatrick mohawk Curtis Brandt

=over 4

=item *

Karen Etheridge <ether@cpan.org>

=item *

יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>

=item *

Jesse Luehrs <doy@tozt.net>

=item *



( run in 1.168 second using v1.01-cache-2.11-cpan-13bb782fe5a )