Devel::Events::Generator::LineTrace - generate C<executing_line> events using


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

Index


Code Index:

NAME

Top

Devel::Events::Generator::LineTrace - generate executing_line events using the perl debugger api.

SYNOPSIS

Top

	my $g = Devel::Events::Generator::LineTrace->new( handler => $h );

	$g->enable();

	# every line of code will fire an event until

	$g->disable();

DESCRIPTION

Top

This Devel::Events generator will fire line tracing events using DB::DB, a perl debugger hook.

Only one instance may be enabled at a given time. Use Devel::Events::Handler::Multiplex to deliver events to multiple handlers.

EVENTS

Top

executing_line

When the generator is enabled, this event will fire for every line of code just before it is executed.

Lines in a package starting with Devel::Events:: will not be reported.

package

The package the line is in.

file

The file of the line being executed.

line

The line number of the line being executed.

METHODS

Top

enable

Enable this generator instance, disabling any other instance of Devel::Events::Generator::LineTrace.

disable

Stop firing events.

line

Called by DB::DB. Used to generate the event.

CAVEATS

Top

Apparently this must be run under perl -d. This is very strange, since Devel::Events::Generator::SubTrace doesn't need the -d flag set.

The Enbugger module can help overcome this limitation.

SEE ALSO

Top

perldebguts, Devel::LineTrace, DB, Devel::ebug, perl5db.pl


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

#!/usr/bin/perl

BEGIN { $^P |= 0x02 }

package Devel::Events::Generator::LineTrace;
use Moose;

with qw/Devel::Events::Generator/;

use Scalar::Util qw/weaken/;

my $SINGLETON;

sub DB::DB {
	if ( $SINGLETON ) {
		my ( $package, $file, $line ) = caller;
		return if $package =~ /^Devel::Events::/;
		$SINGLETON->line( package => $package, file => $file, line => $line );
	}
}

sub enable {
	my $self = shift;
	$SINGLETON = $self;
	weaken($SINGLETON);
}

sub disable {
	$SINGLETON = undef;
}

sub line {
	my ( $self, @args ) = @_;
	$self->send_event( executing_line => @args );
}

__PACKAGE__;

__END__