X-Git-Url: http://www.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXDebug.pm;h=c2e5f28f1adb81a009f087a067e26f1f0b22debb;hb=refs%2Fheads%2Fstaging;hp=d901c6b5b047bb5a7951bca67b3104d30229b672;hpb=2090157518d0d2da860345507680f4ad91b043a2;p=spider.git diff --git a/perl/DXDebug.pm b/perl/DXDebug.pm index d901c6b5..c2e5f28f 100644 --- a/perl/DXDebug.pm +++ b/perl/DXDebug.pm @@ -24,9 +24,11 @@ package DXDebug; +use 5.10.1; + require Exporter; @ISA = qw(Exporter); -@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist dbgdump isdbg dbgclose confess croak cluck carp); +@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist dbgdump isdbg dbgclose dbgtrace dbgprintring confess croak cluck carp); use strict; use vars qw(%dbglevel $fp $callback $cleandays $keepdays $dbgringlth); @@ -54,23 +56,27 @@ if (!defined $DB::VERSION) { \$SIG{__DIE__} = 'DEFAULT'; DXDebug::dbgprintring() if DXDebug::isdbg('nologchan'); DXDebug::dbg(\$@); - DXDebug::dbg(Carp::shortmess(\@_)); +# DXDebug::dbg(Carp::shortmess(\@_)); + DXDebug::longmess(\@_); exit(-1); } sub croak { \$SIG{__DIE__} = 'DEFAULT'; DXDebug::dbgprintring() if DXDebug::isdbg('nologchan'); DXDebug::dbg(\$@); - DXDebug::dbg(Carp::longmess(\@_)); +# DXDebug::dbg(Carp::longmess(\@_)); + DXDebug::shortmess(\@_); exit(-1); } sub carp { DXDebug::dbgprintring(25) if DXDebug('nologchan'); - DXDebug::dbg(Carp::shortmess(\@_)); +# DXDebug::dbg(Carp::shortmess(\@_)); + DXDebug::longmess(\@_); } sub cluck { DXDebug::dbgprintring(25) if DXDebug('nologchan'); - DXDebug::dbg(Carp::longmess(\@_)); +# DXDebug::dbg(Carp::longmess(\@_)); + DXDebug::longmess(\@_); } ); CORE::die(Carp::shortmess($@)) if $@; @@ -85,6 +91,24 @@ if (!defined $DB::VERSION) { my $_isdbg = ''; # current dbg level we are processing +# print stack trace +sub dbgtrace +{ +# say "*** in dbgtrace"; + $_isdbg = 'trace'; + dbg(@_); + for (my $i = 1; (my ($pkg, $fn, $l, $subr) = caller($i)); ++$i) { +# say "*** in dbgtrace $i"; + next if $pkg eq 'DXDebug'; +# say "*** in dbgtrace after package"; + last if $pkg =~ /Mojo/; +# say "*** in dbgtrace $i after mojo"; + $_isdbg = 'trace'; + dbg("Stack ($i): ${pkg}::$subr in $fn line: $l"); + } + $_isdbg = ''; +} + sub dbg { # return unless $fp; @@ -95,8 +119,8 @@ sub dbg my @l = split /\n/, $r; foreach my $l (@l) { $l =~ s/([\x00-\x08\x0B-\x1f\x7f-\xff])/sprintf("%%%02X",ord($1))/eg; - print "$l\n" if defined \*STDOUT && !$no_stdout; my $tag = $_isdbg ? "($_isdbg) " : '(*) '; + print "$tag$l\n" if defined \*STDOUT && !$no_stdout; my $str = "$t^$tag$l"; &$callback($str) if $callback; if ($dbgringlth) { @@ -111,6 +135,7 @@ sub dbg sub dbginit { + my $basename = shift || 'debug'; $callback = shift; # add sig{__DIE__} handling @@ -137,7 +162,7 @@ sub dbginit } } - $fp = DXLog::new('debug', 'dat', 'd'); + $fp = DXLog::new($basename, 'dat', 'd'); dbgclearring(); } @@ -159,6 +184,7 @@ sub dbgdump my $l = shift; my $m = shift; if ($dbglevel{$l} || $l eq 'err') { + my @out; foreach my $l (@_) { for (my $o = 0; $o < length $l; $o += 16) { my $c = substr $l, $o, 16; @@ -166,11 +192,12 @@ sub dbgdump $c =~ s/[\x00-\x1f\x7f-\xff]/./g; my $left = 16 - length $c; $h .= ' ' x (2 * $left) if $left > 0; - dbg($m . sprintf("%4d:", $o) . "$h $c"); + push @out, $m . sprintf("%4d:", $o) . "$h $c"; $m = ' ' x (length $m); } } - } + dbg(@out) if isdbg($l); # yes, I know, I have my reasons; + } } sub dbgadd @@ -207,12 +234,12 @@ sub isdbg($) sub shortmess { - return Carp::shortmess(@_); + return dbgtrace(@_); } sub longmess { - return Carp::longmess(@_); + return dbgtrace(@_); } sub dbgprintring