2. Add full individual checking for all PC protocol fields in all messages
[spider.git] / perl / DXDebug.pm
index df3cb02741cef0d31b606a411358cfa4a3376de9..ac452413555d4975dc3750bcaad5d120234fefaa 100644 (file)
@@ -11,26 +11,56 @@ package DXDebug;
 
 require Exporter;
 @ISA = qw(Exporter);
-@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist isdbg dbgclose);
-@EXPORT_OK = qw(dbginit dbg dbgadd dbgsub dbglist isdbg dbgclose);
+@EXPORT = qw(dbginit dbg dbgadd dbgsub dbglist isdbg dbgclose confess croak cluck cluck);
 
 use strict;
 use vars qw(%dbglevel $fp);
 
-use FileHandle;
 use DXUtil;
 use DXLog ();
-use Carp;
+use Carp qw(cluck);
 
 %dbglevel = ();
 $fp = DXLog::new('debug', 'dat', 'd');
 
+# Avoid generating "subroutine redefined" warnings with the following
+# hack (from CGI::Carp):
+if (!defined $DB::VERSION) {
+       local $^W=0;
+       eval qq( sub confess { 
+           \$SIG{__DIE__} = 'DEFAULT'; 
+        DXDebug::_store(\$@, Carp::shortmess(\@_));
+           exit(-1); 
+       }
+       sub croak { 
+               \$SIG{__DIE__} = 'DEFAULT'; 
+        DXDebug::_store(\$@, Carp::longmess(\@_));
+               exit(-1); 
+       }
+       sub carp    { DXDebug::_store(Carp::shortmess(\@_)); }
+       sub cluck   { DXDebug::_store(Carp::longmess(\@_)); } 
+       );
+
+    CORE::die(Carp::shortmess($@)) if $@;
+} else {
+    eval qq( sub confess { Carp::confess(\@_); }; 
+       sub cluck { Carp::cluck(\@_); }; 
+   );
+} 
+
+
 sub _store
 {
        my $t = time; 
        for (@_) {
-               $fp->writeunix($t, "$t^$_"); 
-               print STDERR $_;
+               chomp;
+               my @l = split /\n/;
+               for (@l) {
+                       my $l = $_;
+                       $l =~ s/([\x00\x08\x0B-\x1f\x7f-\xff])/uc sprintf("%%%02x",ord($1))/eg;                 
+                       print "$_\n" if defined \*STDOUT;
+                       $fp->writeunix($t, "$t^$_"); 
+               }
        }
 }
 
@@ -38,7 +68,8 @@ sub dbginit
 {
        # add sig{__DIE__} handling
        if (!defined $DB::VERSION) {
-               $SIG{__WARN__} = $SIG{__DIE__} = \&_store;
+               $SIG{__WARN__} = sub { _store($@, Carp::shortmess(@_)); };
+               $SIG{__DIE__} = sub { _store($@, Carp::longmess(@_)); };
        }
 }
 
@@ -51,7 +82,7 @@ sub dbgclose
 sub dbg
 {
        my $l = shift;
-       if ($dbglevel{$l}) {
+       if ($dbglevel{$l} || $l eq 'err') {
            my @in = @_;
                my $t = time;
                for (@in) {
@@ -91,5 +122,23 @@ sub isdbg
        my $s = shift;
        return $dbglevel{$s};
 }
+
+sub shortmess 
+{
+       return Carp::shortmess(@_);
+}
+
+sub longmess 
+{ 
+       return Carp::longmess(@_);
+}
+
 1;
 __END__
+
+
+
+
+
+
+