From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

BEGIN {
$Devel::MemoryTrace::Light::VERSION = '0.04';
}
use strict;
my @mod_preference = qw(
Devel::MemoryTrace::Light::BSDProcess
Devel::MemoryTrace::Light::GTop
);
if ($^O ne 'freebsd') {
shift @mod_preference;
}
my $mem_class;
for my $p (@mod_preference) {
eval "use $p";
unless ($@) {
$mem_class = $p; last;
}
}
unless ($mem_class) {
die "No suitable memory examiner found!\n";
}
package DB;
use strict;
my $trace = 1;
my $callback = \&_report;
sub set_callback (&) {
$callback = $_[0];
}
sub restore_callback () {
$callback = \&_report;
}
sub _disable_trace {
$trace = 0;
}
sub _report {
my ($pkg, $file, $line, $mem) = @_;
printf(">> $pkg, $file ($line) used %d bytes\n", $mem);
}
my $last_mem = $mem_class->get_mem();
my @last_id = ('init', 0, 0);
sub DB {
return unless $trace;
my $newmem = $mem_class->get_mem();
if ($newmem > $last_mem) {
$callback->(@last_id, $newmem - $last_mem);
$last_mem = $newmem;
}
@last_id = caller();
}
END {
DB::DB(); # Force last line to be evaluated for memory growth
_disable_trace();
}
1;
# ABSTRACT: A simple lightweight memory-growth tracer
=pod
=head1 NAME
Devel::MemoryTrace::Light - Print a message when your program grows in memory
=head1 VERSION
version .04
=head1 SYNOPSIS
perl -d:MemoryTrace::Light Program
=head1 DESCRIPTION
B<This is an Alpha release! More features to come.>
Prints out a message when your program grows in memory containing the package,
file, line, and number of bytes (resident set size) your program increased. For
example, if your program looked like this:
#!/usr/bin/perl
use strict;
use warnings;
my @arr;
$arr[4096] = 'hello';
Then the output will look like:
>> init, 0 (0) used 8192 bytes
>> main, ex.pl (7) used 20480 bytes
=head1 RUN-TIME CONTROL OF TRACING
If you would like to override the default behavior of printing to STDOUT
whenever the program size increases, you may provide your own callback method.
=head2 set_callback(\&somefunc)
Causes C<\&somefunc> to be called whenever the debugger detects an increase in
memory size. C<\&somefunc> should accept 4 arguments:
=over 4
=item * $pkg
=item * $file
=item * $line
=item * $bytes
=back
=head2 restore_callback()
Restores the default callback.
=head1 OS SUPPORT
Currently works on FreeBSD, Linux, and anywhere else L<GTop> is supported.
On FreeBSD, installing this module will install L<BSD::Process> unless
L<GTop> is already installed. L<BSD::Process> will be preferred if both
modules are on the system.
=head1 BUGS
Please report any bugs (or feature requests) through L<http://rt.cpan.org/>.
=head1 AUTHOR
Matthew Horsfall (alh) - <WolfSage@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2011 by Matthew Horsfall.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut