X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXDebug.pm;h=b0b723ce00f161b0464a7929507eb853ca6da513;hb=28b69e599fe9672c5ec52332d8dd5649b22c6317;hp=ca5339a154c5080c3f6f5074e4321f5f3442b783;hpb=f6abc902d49e13eeca3ff50f84a74f28a3aa3390;p=spider.git diff --git a/perl/DXDebug.pm b/perl/DXDebug.pm index ca5339a1..b0b723ce 100644 --- a/perl/DXDebug.pm +++ b/perl/DXDebug.pm @@ -26,7 +26,7 @@ package DXDebug; require Exporter; @ISA = qw(Exporter); -@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist dbgdump isdbg dbgclose confess croak cluck); +@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist dbgdump isdbg dbgclose confess croak cluck carp); use strict; use vars qw(%dbglevel $fp $callback $cleandays $keepdays $dbgringlth); @@ -52,27 +52,29 @@ if (!defined $DB::VERSION) { local $^W=0; eval qq( sub confess { \$SIG{__DIE__} = 'DEFAULT'; - DXDebug::dbgprintring() unless DXDebug::isdbg('chan'); - DXDebug::dbgclearring(); + DXDebug::dbgprintring() if DXDebug::isdbg('nologchan'); DXDebug::dbg(\$@); DXDebug::dbg(Carp::shortmess(\@_)); exit(-1); } sub croak { \$SIG{__DIE__} = 'DEFAULT'; - DXDebug::dbgprintring() unless DXDebug::isdbg('chan'); - DXDebug::dbgclearring(); + DXDebug::dbgprintring() if DXDebug::isdbg('nologchan'); DXDebug::dbg(\$@); DXDebug::dbg(Carp::longmess(\@_)); exit(-1); } - sub carp { DXDebug::dbg(Carp::shortmess(\@_)); } - sub cluck { DXDebug::dbg(Carp::longmess(\@_)); } - ); + sub carp { + DXDebug::dbgprintring(25) if DXDebug('nologchan'); + DXDebug::dbg(Carp::shortmess(\@_)); + } + sub cluck { + DXDebug::dbgprintring(25) if DXDebug('nologchan'); + DXDebug::dbg(Carp::longmess(\@_)); + } ); CORE::die(Carp::shortmess($@)) if $@; -} -else { +} else { eval qq( sub confess { die Carp::longmess(\@_); }; sub croak { die Carp::shortmess(\@_); }; sub cluck { warn Carp::longmess(\@_); }; @@ -85,7 +87,7 @@ my $_isdbg; # current dbg level we are processing sub dbg($) { - return unless $fp; +# return unless $fp; my $t = time; for (@_) { my $r = $_; @@ -94,13 +96,14 @@ sub dbg($) for (@l) { s/([\x00-\x08\x0B-\x1f\x7f-\xff])/uc sprintf("%%%02x",ord($1))/eg; print "$_\n" if defined \*STDOUT && !$no_stdout; - my $str = "$t^$_"; + my $tag = $_isdbg ? "($_isdbg) " : ''; + my $str = "$t^$tag$_"; &$callback($str) if $callback; if ($dbgringlth) { shift @dbgring while (@dbgring > $dbgringlth); push @dbgring, $str; } - $fp->writeunix($t, $str) unless $dbglevel{"nolog$_isdbg"}; + $fp->writeunix($t, $str) unless !$fp || $dbglevel{"nolog$_isdbg"} ; } } $_isdbg = ''; @@ -215,14 +218,18 @@ sub longmess sub dbgprintring { return unless $fp; + my $count = shift; my $first; - while (my $l = shift @dbgring) { - my ($t, $str) = split /\^/, $l, 2; + my $l; + my $i = defined $count ? @dbgring-$count : 0; + $count = @dbgring; + for ( ; $i < $count; ++$i) { + my ($t, $str) = split /\^/, $dbgring[$i], 2; next unless $t; my $lt = time; unless ($first) { $fp->writeunix($lt, "$lt^###"); - $fp->writeunix($lt, "$lt^### RINGBUFFER START"); + $fp->writeunix($lt, "$lt^### RINGBUFFER START at line $i (zero base)"); $fp->writeunix($lt, "$lt^###"); $first = $t; }