Hi,
I'm having some trouble working with Apache::DB. I would like to
override the debugger subs DB::DB and DB::sub with my own custom
versions. I tried several tips found on here and clpm, but can't quite
get it to work.
I'm running Perl 5.8.8, mod_perl 2, apache 2.0.55, Freebsd 5.5.
Here's what I'm doing:
# From httpd.conf. Note I've compiled perl so that @INC contains a lib directory
# in my /home where my modules are, and perl and httpd are able to use/require
# those modules.
PerlSetEnv PERL5DB 'require "SubTrace.pm"'
<Perl>
use APR::Pool ();
use Apache::DB ();
Apache::DB->init();
</Perl>
<Location ~ "/MyProject/.*cgi$">
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
PerlFixupHandler +Apache::DB
Order allow,deny
Allow from 127.0.0.1
</Location>
#and package SubTrace.pm contains:
package SubTrace;
sub DB::DB {}
sub DB::sub {
if ($DB::sub =~ /^MyModule/ and $DB::sub !~ /DESTROY|CODE/) {
warn "DB::sub: $DB::sub", $/;
}
if ( $DB::sub eq 'DESTROY'
or substr($DB::sub, -9) eq '::DESTROY'
or not defined wantarray)
{
&$DB::sub;
$DB::ret = undef;
}elsif (wantarray) {
@DB::ret = &$DB::sub;
@DB::ret;
}else{
$DB::ret = &$DB::sub;
$DB::ret;
}
}
1;
Now for some reason this just blows up when I run 'httpd -X', the
httpd process becomes several hundred megs and the cgi never displays
anything. To make matters worse, I can't just ^C out, because the
debugger has taken over and spits out info that I don't want, so I
have to kill httpd.
I've looked through Apache::DB, and it should be eval'ing what I've
placed in PERL5DB
but instead it goes ahead and loads Apache/perl5db.pl which I don't
want. I don't want an interactive debugger, instead I want to generate
profiling logs based on my custom DB::DB and DB::sub routines. Maybe
there is a setting I overlooked to disable the interactive debugger
and its output in .perldb and maybe I can get Apache::DB to load
.perldb?
Because the process blew up, I also tried not setting the
PerlFixupHandler to Apache::DB and instead wrapped my SubTrace.pm code
in a BEGIN block, and also added $^P |= 1 to turn on the debugger at
compile time.
This seems to work, because I see output in the log file generated by
my DB::sub routine, however, my DB::DB routine does not seem to be
called at all, which was puzzling, so I think debugging is maybe not
enabled.
Thanks in advance for any tips or advice!
RK
Mail converted by mhonarc 2.6.15
This archive provided courtesy of JSW4.NET, Internet Hosting Services for Small Business.