> -----Original Message-----
> From: WC Jones [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, 10 March 2004 11:55 AM
> To: David le Blanc
> Subject: Re: Enable Perl Debugging at Run-Time
>
> On Wed, Mar 10, 2004 at 11:15:39AM +1100, David le Blanc wrote:
> >
> > While inside a CGI script? enlighten me!
>
> lol :)
>
> You sure you want to be seen talking to me? I resigned from
> the Perl lists because not being a programmer I dont see
> things the way programmers do.
Can be a good thing. You probably get on better with the opposite sex
:_)
> Does this not work out:
>
> open(STDOUT,"> file") || die "Can't redirect STDOUT to file: $!\n";
> open(STDERR,"> file") || die "Can't redirect STDERR to file: $!\n";
>
> At any rate, I cannot see your orginal post (not at my home
> where my server is and the post doesnt seem to have made it to
> the mail / Usenet archives yet.) I was under the impression
> that you were debugging a program PRIOR to making it a CGI -
> which is how I do things -- but I am weird.
>
> If yoyu want to capture the output there are TONs of Apache
> modules for this.
I do all of the above. The script has left its infancy and it now a CGI
with kookies, and forms and other stuff, each of which can be
individually
emulated however tripping the problem I was diagnosing required a
process
'flow', ie, I had to clear the state tables in the database and perform
a
sequence of operations all of which re-entered the CGI with accumulating
state information, user authentication data and cookie crumbs.
Redirecting STDOUT is bad since I want print to go to the web client
I redirect STDERR to capture warnings (-w) and compilation errors to a
log
file. I open a 'debug' log, and 'print DEBUG' to it for application
logging,
and I intersperse the debug log with spats of code-traces enabled around
the
suspicious code at run time. (via my perl -d and DB::DB(){tweaks}) I
also
trap $SIG{__DIE__} to make sure I capture what I can about fatals and
log
them to my trace file.
I even went so far as to have a table in the database, which the perl
code
looks up to decide which modules/functions to trace (table loaded into a
HASH when
the program first runs) hence I don't need to edit the program to turn
debug handling on and off again.... I can add a function to the 'trace
list'
without breaking my stride while using the web page(s).
Oh, and to top it all off, it uses speedy_cgi, which means global
variables
and state information works differently than you might expect !!!
It all works fine. I guess I was hoping someone could suggest an
alternative
to '-d' which would enable me you turn perls *slowish* internal
debugging engine
on and off at run-time. It doesn't really make sense if you think about
it
though... sigh..
Ie, -w is the same as '$^W=1' or 'use warnings' <-- exists
-d is the same as '$^d=1' or 'use debug qw( <debug_module> );' <--
hypothetical
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>