I'm thinking of dropping the below in to the Devel:: namespace; feedback
(on that and on anything in the modules themselves).
The POD:
http://slaysys.com:81/src/Devel-TraceCalls.txt
http://slaysys.com:81/src/Devel-TraceSAX.txt
The code:
http://slaysys.com:81/src/Devel-TraceCalls-0.001.tar.gz
http://slaysys.com:81/src/Devel-TraceSAX-0.001.tar.gz
P.S. The sneak preview of TraceCalls:
NAME
Devel::TraceCalls - Track calls to subs, classes and object instances
SYNOPSIS
## From the command line
perl -d:TraceCalls=Subs,foo,bar script.pl
## Quick & dirty via use
use Devel::TraceCalls { Package => "Foo" };
## Procedural
use Devel::TraceCalls;
trace_calls qw( foo bar Foo::bar ); ## Explicitly named subs
trace_calls {
Subs => [qw( foo bar Foo::bar )],
...options...
};
trace_calls {
Package => "Foo", ## All subs in this package
...options...
};
trace_calls { ## Just these subs
Package => "Foo", ## Optional
Subs => qw( foo, bar ),
...options...
};
trace_calls $object; ## Just track this instance
trace_calls {
Objects => [ $obj1, $obj2 ]; ## Just track these instances
...options...
};
... time passes, sub calls happen ...
my @calls = $t1->calls; ## retrieve what happned
## Object orented
my $t = Devel::TraceCalls->new( ...parameters... );
undef $t; ## disable tracing
DESCRIPTION
ALPHA CODE ALERT. This module may change before "official" release".
Devel::TraceCalls allows subroutine calls to be tracked on a
per-subroutine, per-package, per-class, or per object instance basis.
This can be quite useful when trying to figure out how some poor thing
is being misused in a program you don't fully understand.
The default action is to log the calls to STDERR. Passing in any of the
Calls, PreCall, or PostCall options disables this default behavior (and
passing in an TraceOutput option reenables it).
Devel::TraceCalls works on subroutines and classes by installing wrapper
subroutines and on objects by temporarily reblessing the objects in to
specialized subclasses with "shim" methods. Such objects are reblessed
back when the tracker is DESTROYed.