SPUG: debugging (was: Net::Telnet)

Jason Lamport jason at strangelight.com
Fri Sep 7 16:18:02 CDT 2001


At 12:54 PM -0700 9/7/01, David Dyck wrote:
>On Fri, 7 Sep 2001, Jason Lamport wrote:
>
>>  print( "\$t == $t (". ref( $t ) . ") at line __WHATEVER__\n");
>
>Perl can insert the correct line number when you use __LINE__
>  print( "\$t == $t (". ref( $t ) . ") at ".__FILE__." line ".__LINE__."\n");
>
>see perldata.pod
>     The special literals __FILE__, __LINE__, and __PACKAGE__
>     represent the current filename, line number, and package name at that
>     point in your program.  They may be used only as separate tokens; they
>     will not be interpolated into strings.  If there is no current package
>     (due to an empty C<package;> directive), __PACKAGE__ is the undefined
>     value.

Thanks.  I knew there was something like that available, but was 
feeling too lazy to look it up.

Personally, I use a separate function for debugging, which uses 
caller() to do a partial stack trace.  Generally, in any program of 
any complexity, I'll define a subroutine something like this:

	sub debug {
		...
		# pretty-print @_, caller(), caller(1), caller(2), etc.
	}

And then I can insert debugging probes like this:

	debug( $whatever, $variables, $I, $want );

This also makes it very easy to remove the probes later, since I can 
just do a text search for "debug".

I find this approach -- inserting probes directly into the code -- 
far more useful than using an interactive debugger, for several 
reasons:

*  The debugger tends to force you into doing a linear search for 
bugs, whereas with probes it's easier to do a binary (or N-ary) 
search for the problem.

*  The debugger can only be run from the shell, which can be 
problematic for scripts (such as CGI scripts) that don't expect to be 
run from the shell.  Probes generally work in any environment. (The 
debug routine may need to be modified to print to something other 
than STDOUT -- a log file for example -- but that's usually trivial.)

*  <cranky-old-man-voice> Besides, back when *I* was learning to 
code, we didn't have these fancy new-fangled interactive debuggers 
and compiler type-checking and what-not.  By golly, we had to find 
our *own* bugs!  We also had to code everything in octal.  Uphill. 
Both ways.  In the snow.  And we *liked* it... </cranky-old-man-voice>

Anyway... that's my $0.02 on debugging.  Hope it's helpful to someone.

-jason

P.S.  I was joking about coding in octal.  I'm not *that* old!  ;)

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
     Seattle Perl Users Group (SPUG) Home Page: http://zipcon.net/spug/





More information about the spug-list mailing list