Devel-DebugHooks
view release on metacpan or search on metacpan
use Module::Build;
my $build = Module::Build->new(
module_name => 'Devel::DebugHooks',
dist_author => 'Eugen Konkov <cpan@konkov.top>',
requires => {
'Scope::Cleanup' => 0,
'Sub::Metadata' => 0,
'B::Deparse' => 0,
'Data::Dump' => 0,
'PadWalker' => 0,
'Package::Stash' => 0,
'perl' => '5.12.0',
},
recommends => {
'Log::Log4perl' => 0, # Devel::DebugHooks::TraceAccess.pm
'IO::Async::Loop' => 0, # bin/dclient.pl
},
test_requires => { # Requires Module::Build 0.4004
'Test::More' => 0,
'Test::Output' => 0,
},
"runtime" : {
"recommends" : {
"IO::Async::Loop" : "0",
"Log::Log4perl" : "0"
},
"requires" : {
"B::Deparse" : "0",
"Data::Dump" : "0",
"Package::Stash" : "0",
"PadWalker" : "0",
"Scope::Cleanup" : "0",
"Sub::Metadata" : "0",
"perl" : "v5.12.0"
}
},
"test" : {
"requires" : {
"Data::Section::Simple" : "0",
"Test::CheckDeps" : "0",
"Test::Differences" : "0",
file: lib/Devel/DebugHooks/Verbose.pm
Logger:
file: lib/Devel/DebugHooks/TraceAccess.pm
recommends:
IO::Async::Loop: '0'
Log::Log4perl: '0'
requires:
B::Deparse: '0'
Data::Dump: '0'
Package::Stash: '0'
PadWalker: '0'
Scope::Cleanup: '0'
Sub::Metadata: '0'
perl: v5.12.0
resources:
IRC: irc://irc.perl.org/#debughooks
bugtracker: https://github.com/KES777/Devel-DebugHooks/issues
license: http://dev.perl.org/licenses/
repository: https://github.com/KES777/Devel-DebugHooks
version: '0.07'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
Makefile.PL view on Meta::CPAN
# Note: this file was auto-generated by Module::Build::Compat version 0.4231
require 5.012000;
use ExtUtils::MakeMaker;
WriteMakefile
(
'PREREQ_PM' => {
'Scope::Cleanup' => 0,
'B::Deparse' => 0,
'Data::Dump' => 0,
'Sub::Metadata' => 0,
'PadWalker' => 0,
'Package::Stash' => 0
},
'NAME' => 'Devel::DebugHooks',
'EXE_FILES' => [
'bin/analizer.pl',
'bin/dclient.pl'
],
'INSTALLDIRS' => 'site',
'VERSION_FROM' => 'lib/Devel/DebugHooks.pm',
'PL_FILES' => {}
bin/dclient.pl view on Meta::CPAN
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$timer->start;
$loop->add( $timer );
$loop->run;
__END__
# Devel::Caller - like 'caller'
# PadWalker <- debug statements
# Package::Stash - shows package variables
# View op tree: B::Concise
# B::Deparse - deparse CODEREF
# $deparse = B::Deparse->new("-p", "-sC");
# print $deparse->coderef2text( \&DB::process );
# B::DeparseTree
# Devel::Size - занÑÑое пÑоÑÑÑанÑÑво под пеÑеменнÑÑ
# http://search.cpan.org/~abigail/perl-5.23.5/pod/perldebguts.pod#Using_$ENV{PERL_DEBUG_MSTATS}
# http://www.foo.be/docs/tpj/issues/vol3_2/tpj0302-0011.html
# Devel::Peek - shows info about variables as it exists at internals
lib/Devel/DebugHooks.pm view on Meta::CPAN
# $@ is cleared when compiller enters *eval* or *BEGIN* block
$@ = $DB::context[4];
CODE
# http://perldoc.perl.org/functions/eval.html
# We may define eval in other package if we want to place eval into other
# namespace. It will still "doesn't see the usual surrounding lexical scope"
# because "it is defined in the DB package"
# sub My::eval {
sub eval {
my( $expr ) = @_;
# BUG: PadWalker does not show DB::eval's lexicals
# Q? It is better that PadWalker return undef instead of warn when out of level
print $DB::OUT "Evaluating '$expr'...\n" if DB::state( 'ddd' );
establish_cleanup \&eval_cleanup;
DB::state( 'eval', 1 );
my $package = DB::state( 'package' );
DB::state( 'inDB', undef );
lib/Devel/DebugHooks/Commands.pm view on Meta::CPAN
my $dbg_frames = 0;
{ # Count debugger frames
my @frame;
1 while( @frame = caller( $dbg_frames++ ) and $frame[3] ne 'DB::DB' );
$dbg_frames--;
}
#FIX: When we debug debugger we can not 'go <line>' we always stops at
#require at third line at PadWalker.pm. Debug who set $DB::state = 1
require 'PadWalker.pm';
require 'Package/Stash.pm'; # BUG? spoils DB:: by emacs, dbline
my $my = PadWalker::peek_my( $level +$dbg_frames );
my $our = PadWalker::peek_our( $level +$dbg_frames );
if( $type & 1 ) {
# TODO: for terminals which support color show
# 1. not used variables as grey
# 2. closed over variables as green or bold
print $DB::OUT "\nMY:\n", join( ', ', sort keys %$my ), "\n";
}
if( $type & 2 ) {
print $DB::OUT "\nOUR:\n", join( ', ', sort keys %$our ), "\n";
lib/Devel/DebugHooks/Commands.pm view on Meta::CPAN
# client's sub
my $sub = DB::state( 'stack' )->[ -$level -1 ]{ sub };
if( !defined $sub ) {
# TODO: Mojolicious::__ANON__[/home/feelsafe/perl_lib/lib/perl5/Mojolicious.pm:119]
# convert this to subroutine refs
# print $DB::OUT "Not in a sub: $sub\n";
print $DB::OUT "Not in a sub\n";
}
else {
$sub = \&$sub;
print $DB::OUT join( ', ', sort keys %{ PadWalker::peek_sub( $sub ) } ), "\n";
}
}
if( $type & 16 ) {
print $DB::OUT "\nCLOSED OVER:\n";
# First elements starts at -1 subscript
my $sub = DB::state( 'stack' )->[ -$level -1 ]{ sub };
if( !defined $sub ) {
print $DB::OUT "Not in a sub\n";
# print $DB::OUT (ref $sub ) ."Not in a sub: $sub\n";
}
else {
$sub = \&$sub;
print $DB::OUT join( ', ', sort keys %{ (PadWalker::closed_over( $sub ))[0] } ), "\n";
}
}
if( $var ) {
my( $sigil, $name, $extra ) = $var =~ m/^(.)(\w+)(.*)$/;
$var = $sigil .$name;
unless( exists $my->{ $var } || exists $our->{ $var } ) {
print $DB::OUT "Variable '$var' does not exists at this scope\n";
return -1;
( run in 0.727 second using v1.01-cache-2.11-cpan-05444aca049 )