Win32 sitelib intuition from DLL location
[p5sagit/p5-mst-13.2.git] / pod / perldebug.pod
index 8e595f5..7d8d84f 100644 (file)
@@ -8,12 +8,20 @@ First of all, have you tried using the B<-w> switch?
 
 =head1 The Perl Debugger
 
+"As soon as we started programming, we found to our
+surprise that it wasn't as easy to get programs right
+as we had thought.  Debugging had to be discovered.
+I can remember the exact instant when I realized that
+a large part of my life from then on was going to be
+spent in finding mistakes in my own programs."
+--Maurice Wilkes, 1949
+
 If you invoke Perl with the B<-d> switch, your script runs under the
 Perl source debugger.  This works like an interactive Perl
 environment, prompting for debugger commands that let you examine
-source code, set breakpoints, get stack back-traces, change the values of
+source code, set breakpoints, get stack backtraces, change the values of
 variables, etc.  This is so convenient that you often fire up
-the debugger all by itself just to test out Perl constructs 
+the debugger all by itself just to test out Perl constructs
 interactively to see what they do.  For example:
 
     perl -d -e 42
@@ -23,7 +31,7 @@ typical compiled environment.  Instead, the B<-d> flag tells the compiler
 to insert source information into the parse trees it's about to hand off
 to the interpreter.  That means your code must first compile correctly
 for the debugger to work on it.  Then when the interpreter starts up, it
-pre-loads a Perl library file containing the debugger itself.  
+preloads a Perl library file containing the debugger itself.
 
 The program will halt I<right before> the first run-time executable
 statement (but see below regarding compile-time statements) and ask you
@@ -47,7 +55,7 @@ The debugger understands the following commands:
 
 =item h [command]
 
-Prints out a help message.  
+Prints out a help message.
 
 If you supply another debugger command as an argument to the C<h> command,
 it prints out the description for just that command.  The special
@@ -73,7 +81,7 @@ where STDOUT may be redirected to.
 
 =item x expr
 
-Evaluates its expression in list context and dumps out the result 
+Evaluates its expression in list context and dumps out the result
 in a pretty-printed fashion.  Nested data structures are printed out
 recursively, unlike the C<print> function.
 
@@ -102,7 +110,7 @@ Same as C<V currentpackage [vars]>.
 
 =item T
 
-Produce a stack back-trace.  See below for details on its output.
+Produce a stack backtrace.  See below for details on its output.
 
 =item s [expr]
 
@@ -113,9 +121,9 @@ supplied that includes function calls, it too will be single-stepped.
 =item n [expr]
 
 Next.  Executes over subroutine calls, until it reaches the beginning
-of the next statement. If an expression is
-supplied that includes function calls, it too will be executed with
-stops before each statement.
+of the next statement.  If an expression is supplied that includes
+function calls, those functions will be executed with stops before
+each statement.
 
 =item E<lt>CRE<gt>
 
@@ -136,7 +144,7 @@ List C<incr+1> lines starting at C<min>.
 
 =item l min-max
 
-List lines C<min> through C<max>. C<l -> is synonymous to C<->.
+List lines C<min> through C<max>.  C<l -> is synonymous to C<->.
 
 =item l line
 
@@ -161,7 +169,7 @@ print it out.
 
 =item f filename
 
-Switch to viewing a different file or eval statement. If C<filename>
+Switch to viewing a different file or eval statement.  If C<filename>
 is not a full filename as found in values of %INC, it is considered as
 a regexp.
 
@@ -244,7 +252,7 @@ Set breakpoint at first line of subroutine after it is compiled.
 
 =item b load filename
 
-Set breakpoint at the first executed line of the file. Filename should
+Set breakpoint at the first executed line of the file.  Filename should
 be a full name as found in values of %INC.
 
 =item b compile subname
@@ -305,12 +313,12 @@ Run Tk while prompting (with ReadLine).
 
 =item C<signalLevel>, C<warnLevel>, C<dieLevel>
 
-Level of verbosity. By default the debugger is in a sane verbose mode,
+Level of verbosity.  By default the debugger is in a sane verbose mode,
 thus it will print backtraces on all the warnings and die-messages
 which are going to be printed out, and will print a message when
-interesting uncaught signals arrive. 
+interesting uncaught signals arrive.
 
-To disable this behaviour, set these values to 0. If C<dieLevel> is 2,
+To disable this behaviour, set these values to 0.  If C<dieLevel> is 2,
 then the messages which will be caught by surrounding C<eval> are also
 printed.
 
@@ -328,20 +336,27 @@ C<|visual_perl_db>), then a short, "emacs like" message is used.
 
 If 0, allows I<stepping off> the end of the script.
 
-=item C<PrintRet> 
+=item C<PrintRet>
 
 affects printing of return value after C<r> command.
 
-=item C<frame> 
+=item C<ornaments>
+
+affects screen appearance of the command line (see L<Term::ReadLine>).
+
+=item C<frame>
 
 affects printing messages on entry and exit from subroutines.  If
 C<frame & 2> is false, messages are printed on entry only. (Printing
 on exit may be useful if inter(di)spersed with other messages.)
 
 If C<frame & 4>, arguments to functions are printed as well as the
-context and caller info. If C<frame & 8>, overloaded C<stringify> and
-C<tie>d C<FETCH> are enabled on the printed arguments. The length at
-which the argument list is truncated is governed by the next option:
+context and caller info.  If C<frame & 8>, overloaded C<stringify> and
+C<tie>d C<FETCH> are enabled on the printed arguments. If C<frame &
+16>, the return value from the subroutine is printed as well.
+
+The length at which the argument list is truncated is governed by the
+next option:
 
 =item C<maxTraceLen>
 
@@ -361,7 +376,7 @@ Print only first N elements ('' for all).
 
 =item C<compactDump>, C<veryCompact>
 
-Change style of array and hash dump. If C<compactDump>, short array
+Change style of array and hash dump.  If C<compactDump>, short array
 may be printed on one line.
 
 =item C<globPrint>
@@ -378,14 +393,14 @@ Dump symbol tables of packages.
 
 =item C<quote>, C<HighBit>, C<undefPrint>
 
-Change style of string dump. Default value of C<quote> is C<auto>, one
+Change style of string dump.  Default value of C<quote> is C<auto>, one
 can enable either double-quotish dump, or single-quotish by setting it
-to C<"> or C<'>. By default, characters with high bit set are printed
+to C<"> or C<'>.  By default, characters with high bit set are printed
 I<as is>.
 
-=item C<UsageOnly> 
+=item C<UsageOnly>
 
-I<very> rudimentally per-package memory usage dump. Calculates total
+I<very> rudimentally per-package memory usage dump.  Calculates total
 size of strings in variables in the package.
 
 =back
@@ -410,7 +425,7 @@ The TTY to use for debugging I/O.
 
 =item C<noTTY>
 
-If set, goes in C<NonStop> mode, and would not connect to a TTY. If
+If set, goes in C<NonStop> mode, and would not connect to a TTY.  If
 interrupt (or if control goes to debugger via explicit setting of
 $DB::signal or $DB::single from the Perl script), connects to a TTY
 specified by the C<TTY> option at startup, or to a TTY found at
@@ -418,7 +433,7 @@ runtime using C<Term::Rendezvous> module of your choice.
 
 This module should implement a method C<new> which returns an object
 with two methods: C<IN> and C<OUT>, returning two filehandles to use
-for debugging input and output correspondingly. Method C<new> may
+for debugging input and output correspondingly.  Method C<new> may
 inspect an argument which is a value of C<$ENV{PERLDB_NOTTY}> at
 startup, or is C<"/tmp/perldbtty$$"> otherwise.
 
@@ -429,7 +444,7 @@ ReadLine applications.
 
 =item C<NonStop>
 
-If set, debugger goes into non-interactive mode until interrupted, or
+If set, debugger goes into noninteractive mode until interrupted, or
 programmatically by setting $DB::signal or $DB::single.
 
 =back
@@ -440,7 +455,7 @@ Here's an example of using the C<$ENV{PERLDB_OPTS}> variable:
 
 will run the script C<myprogram> without human intervention, printing
 out the call tree with entry and exit points.  Note that C<N f=2> is
-equivalent to C<NonStop=1 frame=2>. Note also that at the moment when
+equivalent to C<NonStop=1 frame=2>.  Note also that at the moment when
 this documentation was written all the options to the debugger could
 be uniquely abbreviated by the first letter (with exception of
 C<Dump*> options).
@@ -449,7 +464,7 @@ Other examples may include
 
   $ PERLDB_OPTS="N f A L=listing" perl -d myprogram
 
-- runs script non-interactively, printing info on each entry into a
+- runs script noninteractively, printing info on each entry into a
 subroutine and each executed line into the file F<listing>. (If you
 interrupt it, you would better reset C<LineInfo> to something
 "interactive"!)
@@ -458,15 +473,13 @@ interrupt it, you would better reset C<LineInfo> to something
   $ env "PERLDB_OPTS=R=0 TTY=/dev/ttyc" perl -d myprogram
 
 may be useful for debugging a program which uses C<Term::ReadLine>
-itself. Do not forget detach shell from the TTY in the window which
+itself.  Do not forget detach shell from the TTY in the window which
 corresponds to F</dev/ttyc>, say, by issuing a command like
 
   $ sleep 1000000
 
 See L<"Debugger Internals"> below for more details.
 
-=over 12
-
 =item E<lt> [ command ]
 
 Set an action (Perl command) to happen before every debugger prompt.
@@ -531,7 +544,7 @@ Quit.  ("quit" doesn't work for this.)  This is the only supported way
 to exit the debugger, though typing C<exit> twice may do it too.
 
 Set an C<O>ption C<inhibit_exit> to 0 if you want to be able to I<step
-off> the end the script. You may also need to set C<$finished> to 0 at
+off> the end the script.  You may also need to set C<$finished> to 0 at
 some moment if you want to step through global destruction.
 
 =item R
@@ -541,7 +554,7 @@ your history across this, but internal settings and command line options
 may be lost.
 
 Currently the following setting are preserved: history, breakpoints,
-actions, debugger C<O>ptions, and the following command-line
+actions, debugger C<O>ptions, and the following command line
 options: B<-w>, B<-I>, and B<-e>.
 
 =item |dbcmd
@@ -595,14 +608,14 @@ or even
     DB<<17>>
 
 where that number is the command number, which you'd use to access with
-the built-in B<csh>-like history mechanism, e.g., C<!17> would repeat
+the builtin B<csh>-like history mechanism, e.g., C<!17> would repeat
 command number 17.  The number of angle brackets indicates the depth of
 the debugger.  You could get more than one set of brackets, for example, if
 you'd already at a breakpoint and then printed out the result of a
 function call that itself also has a breakpoint, or you step into an
 expression via C<s/n/t expression> command.
 
-=item Multi-line commands
+=item Multiline commands
 
 If you want to enter a multi-line command, such as a subroutine
 definition with several statements, or a format, you may escape the
@@ -622,7 +635,7 @@ commands typed into the debugger.
 
 =item Stack backtrace
 
-Here's an example of what a stack back-trace via C<T> command might
+Here's an example of what a stack backtrace via C<T> command might
 look like:
 
     $ = main::infested called from file `Ambulation.pm' line 10
@@ -669,9 +682,11 @@ next executed line is marked by C<==E<gt>>.
 When C<frame> option is set, debugger would print entered (and
 optionally exited) subroutines in different styles.
 
-What follows is the start of the listing of 
+What follows is the start of the listing of
 
-  env "PERLDB_OPTS=f=1 N" perl -d -V
+  env "PERLDB_OPTS=f=n N" perl -d -V
+
+for different values of C<n>:
 
 =over 4
 
@@ -776,13 +791,33 @@ What follows is the start of the listing of
    in  $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574
    out $=Config::FETCH('Config=HASH(0x1aa444)', 'baserev') from lib/Config.pm:574
 
+=item 30
+
+  in  $=CODE(0x15eca4)() from /dev/null:0
+   in  $=CODE(0x182528)() from lib/Config.pm:2
+    Package lib/Exporter.pm.
+   out $=CODE(0x182528)() from lib/Config.pm:0
+   scalar context return from CODE(0x182528): undef
+   Package lib/Config.pm.
+   in  $=Config::TIEHASH('Config') from lib/Config.pm:628
+   out $=Config::TIEHASH('Config') from lib/Config.pm:628
+   scalar context return from Config::TIEHASH:   empty hash
+   in  $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
+    in  $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/Exporter.pm:171
+    out $=Exporter::export('Config', 'main', 'myconfig', 'config_vars') from lib/Exporter.pm:171
+    scalar context return from Exporter::export: ''
+   out $=Exporter::import('Config', 'myconfig', 'config_vars') from /dev/null:0
+   scalar context return from Exporter::import: ''
+
+
 =back
 
 In all the cases indentation of lines shows the call tree, if bit 2 of
 C<frame> is set, then a line is printed on exit from a subroutine as
 well, if bit 4 is set, then the arguments are printed as well as the
 caller info, if bit 8 is set, the arguments are printed even if they
-are tied or references.
+are tied or references, if bit 16 is set, the return value is printed
+as well.
 
 When a package is compiled, a line like this
 
@@ -797,7 +832,7 @@ is printed with proper indentation.
 If you have any compile-time executable statements (code within a BEGIN
 block or a C<use> statement), these will C<NOT> be stopped by debugger,
 although C<require>s will (and compile-time statements can be traced
-with C<AutoTrace> option set in C<PERLDB_OPTS>).  From your own Perl 
+with C<AutoTrace> option set in C<PERLDB_OPTS>).  From your own Perl
 code, however, you can
 transfer control back to the debugger using the following statement,
 which is harmless if the debugger is not running:
@@ -815,13 +850,13 @@ breakpoint on I<load> of some module thusly
     DB<7> b load f:/perllib/lib/Carp.pm
   Will stop on load of `f:/perllib/lib/Carp.pm'.
 
-and restart debugger by C<R> command (if possible). One can use C<b
+and restart debugger by C<R> command (if possible).  One can use C<b
 compile subname> for the same purpose.
 
 =head2 Debugger Customization
 
 Most probably you not want to modify the debugger, it contains enough
-hooks to satisfy most needs. You may change the behaviour of debugger
+hooks to satisfy most needs.  You may change the behaviour of debugger
 from the debugger itself, using C<O>ptions, from the command line via
 C<PERLDB_OPTS> environment variable, and from I<customization files>.
 
@@ -838,10 +873,10 @@ One changes options from F<.perldb> file via calls like this one;
 
     parse_options("NonStop=1 LineInfo=db.out AutoTrace=1 frame=2");
 
-(the code is executed in the package C<DB>). Note that F<.perldb> is
-processed before processing C<PERLDB_OPTS>. If F<.perldb> defines the
+(the code is executed in the package C<DB>).  Note that F<.perldb> is
+processed before processing C<PERLDB_OPTS>.  If F<.perldb> defines the
 subroutine C<afterinit>, it is called after all the debugger
-initialization ends. F<.perldb> may be contained in the current
+initialization ends.  F<.perldb> may be contained in the current
 directory, or in the C<LOGDIR>/C<HOME> directory.
 
 If you want to modify the debugger, copy F<perl5db.pl> from the Perl
@@ -861,7 +896,7 @@ the Term::ReadKey and Term::ReadLine modules from CPAN, you will
 have full editing capabilities much like GNU I<readline>(3) provides.
 Look for these in the F<modules/by-module/Term> directory on CPAN.
 
-A rudimentary command-line completion is also available.
+A rudimentary command line completion is also available.
 Unfortunately, the names of lexical variables are not available for
 completion.
 
@@ -903,7 +938,7 @@ in that profile.
 
 When you call the B<caller> function (see L<perlfunc/caller>) from the
 package DB, Perl sets the array @DB::args to contain the arguments the
-corresponding stack frame was called with.  
+corresponding stack frame was called with.
 
 If perl is run with B<-d> option, the following additional features
 are enabled:
@@ -919,48 +954,48 @@ application.
 =item *
 
 The array C<@{"_<$filename"}> is the line-by-line contents of
-$filename for all the compiled files. Same for C<eval>ed strings which
-contain subroutines, or which are currently executed. The C<$filename>
+$filename for all the compiled files.  Same for C<eval>ed strings which
+contain subroutines, or which are currently executed.  The C<$filename>
 for C<eval>ed strings looks like C<(eval 34)>.
 
 =item *
 
 The hash C<%{"_<$filename"}> contains breakpoints and action (it is
 keyed by line number), and individual entries are settable (as opposed
-to the whole hash). Only true/false is important to Perl, though the
+to the whole hash).  Only true/false is important to Perl, though the
 values used by F<perl5db.pl> have the form
-C<"$break_condition\0$action">. Values are magical in numeric context:
+C<"$break_condition\0$action">.  Values are magical in numeric context:
 they are zeros if the line is not breakable.
 
 Same for evaluated strings which contain subroutines, or which are
-currently executed. The C<$filename> for C<eval>ed strings looks like
+currently executed.  The C<$filename> for C<eval>ed strings looks like
 C<(eval 34)>.
 
 =item *
 
-The scalar C<${"_<$filename"}> contains C<"_<$filename">. Same for
+The scalar C<${"_<$filename"}> contains C<"_<$filename">.  Same for
 evaluated strings which contain subroutines, or which are currently
-executed. The C<$filename> for C<eval>ed strings looks like C<(eval
+executed.  The C<$filename> for C<eval>ed strings looks like C<(eval
 34)>.
 
 =item *
 
 After each C<require>d file is compiled, but before it is executed,
 C<DB::postponed(*{"_<$filename"})> is called (if subroutine
-C<DB::postponed> exists). Here the $filename is the expanded name of
+C<DB::postponed> exists).  Here the $filename is the expanded name of
 the C<require>d file (as found in values of C<%INC>).
 
 =item *
 
 After each subroutine C<subname> is compiled existence of
-C<$DB::postponed{subname}> is checked. If this key exists,
+C<$DB::postponed{subname}> is checked.  If this key exists,
 C<DB::postponed(subname)> is called (if subroutine C<DB::postponed>
 exists).
 
 =item *
 
 A hash C<%DB::sub> is maintained, with keys being subroutine names,
-values having the form C<filename:startline-endline>. C<filename> has
+values having the form C<filename:startline-endline>.  C<filename> has
 the form C<(eval 31)> for subroutines defined inside C<eval>s.
 
 =item *
@@ -1009,20 +1044,20 @@ statement, and would wait for your C<CR> to continue.
 
 The following debugger is quite functional:
 
-  { 
-    package DB; 
-    sub DB  {} 
+  {
+    package DB;
+    sub DB  {}
     sub sub {print ++$i, " $sub\n"; &$sub}
   }
 
 It prints the sequential number of subroutine call and the name of the
-called subroutine. Note that C<&DB::sub> should be compiled into the
+called subroutine.  Note that C<&DB::sub> should be compiled into the
 package C<DB>.
 
 =head2 Debugger Internals
 
 At the start, the debugger reads your rc file (F<./.perldb> or
-F<~/.perldb> under UNIX), which can set important options.  This file may
+F<~/.perldb> under Unix), which can set important options.  This file may
 define a subroutine C<&afterinit> to be executed after the debugger is
 initialized.
 
@@ -1031,21 +1066,21 @@ PERLDB_OPTS and parses it as a rest of C<O ...> line in debugger prompt.
 
 It also maintains magical internal variables, such as C<@DB::dbline>,
 C<%DB::dbline>, which are aliases for C<@{"::_<current_file"}>
-C<%{"::_<current_file"}>. Here C<current_file> is the currently
+C<%{"::_<current_file"}>.  Here C<current_file> is the currently
 selected (with the debugger's C<f> command, or by flow of execution)
 file.
 
-Some functions are provided to simplify customization. See L<"Debugger
-Customization"> for description of C<DB::parse_options(string)>. The
+Some functions are provided to simplify customization.  See L<"Debugger
+Customization"> for description of C<DB::parse_options(string)>.  The
 function C<DB::dump_trace(skip[, count])> skips the specified number
 of frames, and returns an array containing info about the caller
-frames (all if C<count> is missing). Each entry is a hash with keys
+frames (all if C<count> is missing).  Each entry is a hash with keys
 C<context> (C<$> or C<@>), C<sub> (subroutine name, or info about
 eval), C<args> (C<undef> or a reference to an array), C<file>, and
 C<line>.
 
-The function C<DB::print_trace(FH, skip[, count[, short]])> prints 
-formatted info about caller frames. The last two functions may be
+The function C<DB::print_trace(FH, skip[, count[, short]])> prints
+formatted info about caller frames.  The last two functions may be
 convenient as arguments to C<E<lt>>, C<E<lt>E<lt>> commands.
 
 =head2 Other resources
@@ -1058,4 +1093,4 @@ You cannot get the stack frame information or otherwise debug functions
 that were not compiled by Perl, such as C or C++ extensions.
 
 If you alter your @_ arguments in a subroutine (such as with B<shift>
-or B<pop>, the stack back-trace will not show the original values.
+or B<pop>, the stack backtrace will not show the original values.