|Just another Perl shrine
Debugging Perl scripts which use fork()by IlyaM (Parson)
|on Nov 29, 2001 at 09:03 UTC
IntroSome scripts in test suite for module HTTP::WebTest which I maintain use fork for creation of child proccess - test HTTP servers. I'm used to debug problems in my code with perl debugger so I was interested how can I use it with scripts which use fork. I found that perl debugger does provides support for such scripts but this feature is completely undocumented.
Note that techniques described in this article probably work only on UNIX and UNIX-like systems. This article is probably is not very easy reading because its topic is quite complex itself.
Debugging Several Proccesses at Same Time
I need TTYAfter fork there are more than one process and more than one instance of perl debugger. The problem is that each instance of perl debugger requires its own TTY. Right after fork instance of perl debugger which runs in child process tries to switch TTY. If it can't do that it tries to use same TTY as perl debugger which runs in parent process. This can result sometimes with either screwed TTY or runaway child process which takes 100% of CPU.
How can debugger in child process find free TTY? Perl debugger can use undocumented variables $DB::fork_TTY or undocumented subroutine $DB::get_fork_TTY to find avialable TTY or it can try to start xterm process and use xterm's TTY.
How it works?
And the last option - just set manually $DB::fork_TTY.
Some Useful Tricks (Kinda Q&A)
See Alsoperldoc perldebug, Using the Perl Debugger and sources of perl debugger (perl5db.pl).
P.S.I'm gladly accepting correction for this article. Including corrections for my poor English.
Update: Thanks for correction cybear.