Devel::Trace - Print out each line before it is executed (like C<sh -x>)


Devel-Trace documentation Contained in the Devel-Trace distribution.

Index


Code Index:

NAME

Top

Devel::Trace - Print out each line before it is executed (like sh -x)

SYNOPSIS

Top

  perl -d:Trace program

DESCRIPTION

Top

If you run your program with perl -d:Trace program, this module will print a message to standard error just before each line is executed. For example, if your program looks like this:

        #!/usr/bin/perl

        


        print "Statement 1 at line 4\n";
        print "Statement 2 at line 5\n";
        print "Call to sub x returns ", &x(), " at line 6.\n";

        exit 0;

        


        sub x {
          print "In sub x at line 12.\n";
          return 13;
        }

Then the Trace output will look like this:

        >> ./test:4: print "Statement 1 at line 4\n";
        >> ./test:5: print "Statement 2 at line 5\n";
        >> ./test:6: print "Call to sub x returns ", &x(), " at line 6.\n";
        >> ./test:12:   print "In sub x at line 12.\n";
        >> ./test:13:   return 13;
        >> ./test:8: exit 0;

This is something like the shell's -x option.

DETAILS

Top

Inside your program, you can enable and disable tracing by doing

    $Devel::Trace::TRACE = 1;   # Enable
    $Devel::Trace::TRACE = 0;   # Disable

or

    Devel::Trace::trace('on');  # Enable
    Devel::Trace::trace('off'); # Disable




Devel::Trace exports the trace function if you ask it to:

    import Devel::Trace 'trace';

Then if you want you just say

    trace 'on';                 # Enable
    trace 'off';                # Disable




TODO

Top

We'll see.

LICENSE

Top

Devel::Trace 0.11 and its source code are hereby placed in the public domain.

Author

Top


Devel-Trace documentation Contained in the Devel-Trace distribution.

# -*- perl -*-

package Devel::Trace;
$VERSION = '0.11';
$TRACE = 1;

# This is the important part.  The rest is just fluff.
sub DB::DB {
  return unless $TRACE;
  my ($p, $f, $l) = caller;
  my $code = \@{"::_<$f"};
  print STDERR ">> $f:$l: $code->[$l]";
}


sub import {
  my $package = shift;
  foreach (@_) {
    if ($_ eq 'trace') {
      my $caller = caller;
      *{$caller . '::trace'} = \&{$package . '::trace'};
    } else {
      use Carp;
      croak "Package $package does not export `$_'; aborting";
    }
  }
}

my %tracearg = ('on' => 1, 'off' => 0);
sub trace {
  my $arg = shift;
  $arg = $tracearg{$arg} while exists $tracearg{$arg};
  $TRACE = $arg;
}

1;