1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
package Devel::ebug::Backend::Plugin::Run;
use strict;
use warnings;
sub register_commands {
return (
next => { sub => \&next, record => 1 },
return => { sub => \&return, record => 1 },
run => { sub => \&run, record => 1 },
step => { sub => \&step, record => 1 },
);
}
sub next {
my($req, $context) = @_;
$context->{mode} = "next"; # single step (but over subroutines)
$context->{last} = 1; # and out of the loop
return {};
}
sub return {
my($req, $context) = @_;
if ($req->{values}) {
$context->{stack}->[0]->{return} = $req->{values};
}
$context->{mode} = "return"; # run until returned from subroutine
$DB::single = 0; # run
if ($context->{stack}->[-1]) {
$context->{stack}->[-1]->{single} = 1; # single step higher up
}
$context->{last} = 1; # and out of the loop
return {};
}
sub run {
my($req, $context) = @_;
$context->{mode} = "run"; # run until break point
if (@{$context->{watch_points}}) {
# watch points, let's go slow
$context->{watch_single} = 0;
} else {
# no watch points? let's go fast!
$DB::single = 0; # run until next break point
}
$context->{last} = 1; # and out of the loop
return {};
}
sub step {
my($req, $context) = @_;
$DB::single = 1; # single step
$context->{mode} = "step"; # single step (into subroutines)
$context->{last} = 1; # and out of the loop, onto the next command
return {};
}
1;
|