Devel::TraceFuncs lets you instrument your programs, so you can see
what subroutines get called when, and by whom.  This is particularly
useful if you have a timing problem that doesn't show up if you use
the debugger (a "heisenbug").

The following program:

  use Devel::TraceFuncs qw(trace debug);

  sub foo {
    trace(my $f);

    debug "hi";
  }

  trace(my $f);

  foo(1, 2);
  debug "there";

produces this output:

  +-> global
  |  +-> main::foo(1, 2) (in t.pm:10)
  |  |  hi (in t.pm:6)
  |  +-< main::foo(1, 2) (in t.pm:10)
  |  there (in t.pm:11)
  +-< global

INSTALLATION:

This should do it:

  perl Makefile.PL
  make install