Padre
view release on metacpan or search on metacpan
lib/Padre/Wx/Panel/Debugger.pm view on Meta::CPAN
foreach my $variable ( keys %{ $self->{var_val} } ) {
my $value;
eval { $value = $self->{client}->get_value($variable); };
if ($@) {
#ignore error
} else {
my $search_text = 'Use of uninitialized value';
unless ( $value =~ m/$search_text/ ) {
$self->{var_val}{$variable} = $value;
}
}
}
# only get local variables if required
if ( $self->{local_variables} == 1 ) {
$self->get_local_variables;
}
# Only enable global variables if we are debuging in a project
# why dose $self->{project_dir} contain the root when no magic file present
#TODO trying to stop debug X & V from crashing
my @magic_files = qw { Makefile.PL Build.PL dist.ini };
my $in_project = 0;
require File::Spec;
foreach (@magic_files) {
if ( -e File::Spec->catfile( $self->{project_dir}, $_ ) ) {
$in_project = 1;
}
}
if ($in_project) {
$self->{show_global_variables}->Enable;
if ( $self->{current_file} =~ m/pm$/ ) {
$self->get_global_variables;
} else {
$self->{show_global_variables}->Disable;
# get ride of stale values
$self->{global_values} = {};
}
}
$self->update_variables( $self->{var_val}, $self->{local_values}, $self->{global_values} );
return;
}
#######
# Composed Method get_variables
#######
sub get_local_variables {
my $self = shift;
my $auto_values = $self->{client}->get_y_zero;
$auto_values =~ s/^([\$\@\%]\w+)/:;$1/xmg;
my @auto = split m/^:;/xm, $auto_values;
#remove ghost at begining
shift @auto;
# This is better I think, it's quicker
$self->{local_values} = {};
foreach (@auto) {
$_ =~ m/(.*) = (.*)/sm;
if ( defined $1 ) {
if ( defined $2 ) {
$self->{local_values}->{$1} = $2;
} else {
$self->{local_values}->{$1} = BLANK;
}
}
}
return;
}
#######
# Composed Method get_variables
#######
sub get_global_variables {
my $self = shift;
my $var_regex = '!(INC|ENV|SIG)';
my $auto_values = $self->{client}->get_x_vars($var_regex);
$auto_values =~ s/^((?:[\$\@\%]\w+)|(?:[\$\@\%]\S+)|(?:File\w+))/:;$1/xmg;
my @auto = split m/^:;/xm, $auto_values;
#remove ghost at begining
shift @auto;
# This is better I think, it's quicker
$self->{global_values} = {};
foreach (@auto) {
$_ =~ m/(.*)(?: = | => )(.*)/sm;
if ( defined $1 ) {
if ( defined $2 ) {
$self->{global_values}->{$1} = $2;
} else {
$self->{global_values}->{$1} = BLANK;
}
}
}
return;
}
#######
# Internal method _setup_db connector
#######
sub _setup_db {
my $self = shift;
# set padre db relation
$self->{debug_breakpoints} = ('Padre::DB::DebugBreakpoints');
return;
}
#######
# Internal Method _get_bp_db
# display relation db
#######
sub _get_bp_db {
my $self = shift;
my $editor = $self->current->editor;
my $document = $self->current->document;
$self->_setup_db();
$self->{project_dir} = $document->project_dir;
$self->{current_file} = $document->filename;
TRACE("current file from _get_bp_db: $self->{current_file}") if DEBUG;
my $sql_select = 'ORDER BY filename ASC, line_number ASC';
my @tuples = $self->{debug_breakpoints}->select($sql_select);
for ( 0 .. $#tuples ) {
# if ( $tuples[$_][1] =~ m/^$self->{current_file}$/ ) {
if ( $tuples[$_][1] eq $self->{current_file} ) {
if ( $self->{client}->set_breakpoint( $tuples[$_][1], $tuples[$_][2] ) == 1 ) {
( run in 0.554 second using v1.01-cache-2.11-cpan-71847e10f99 )