X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldebug.pod;h=7d8d84f3edad8c2e4fcf1fea8ad2c659eb882fb3;hb=b4793f7f58b137d8b2f6d505d6c77dee2cd8cb25;hp=0c61b74350bbf30e3af5941cece184a47f05f3a5;hpb=774d564bb7dd1ed64ca0d7e534aa67e93f991f02;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldebug.pod b/pod/perldebug.pod index 0c61b74..7d8d84f 100644 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@ -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 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 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 function. @@ -102,7 +110,7 @@ Same as C. =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] @@ -308,7 +316,7 @@ Run Tk while prompting (with ReadLine). 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 is 2, then the messages which will be caught by surrounding C are also @@ -328,11 +336,15 @@ C<|visual_perl_db>), then a short, "emacs like" message is used. If 0, allows I the end of the script. -=item C +=item C affects printing of return value after C command. -=item C +=item C + +affects screen appearance of the command line (see L). + +=item C affects printing messages on entry and exit from subroutines. If C is false, messages are printed on entry only. (Printing @@ -340,8 +352,11 @@ on exit may be useful if inter(di)spersed with other messages.) If C, arguments to functions are printed as well as the context and caller info. If C, overloaded C and -Cd C are enabled on the printed arguments. The length at -which the argument list is truncated is governed by the next option: +Cd C are enabled on the printed arguments. If C, 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 @@ -383,7 +398,7 @@ 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 I. -=item C +=item C I rudimentally per-package memory usage dump. Calculates total size of strings in variables in the package. @@ -429,7 +444,7 @@ ReadLine applications. =item C -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 @@ -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. (If you interrupt it, you would better reset C to something "interactive"!) @@ -465,8 +480,6 @@ corresponds to F, say, by issuing a command like See L<"Debugger Internals"> below for more details. -=over 12 - =item E [ command ] Set an action (Perl command) to happen before every debugger prompt. @@ -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 Cptions, and the following command-line +actions, debugger Cptions, 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-like history mechanism, e.g., C would repeat +the builtin B-like history mechanism, e.g., C 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 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 command might +Here's an example of what a stack backtrace via C 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>. When C 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: =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 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 statement), these will C be stopped by debugger, although Cs will (and compile-time statements can be traced -with C option set in C). From your own Perl +with C option set in C). 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: @@ -861,7 +896,7 @@ the Term::ReadKey and Term::ReadLine modules from CPAN, you will have full editing capabilities much like GNU I(3) provides. Look for these in the F 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 function (see L) 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: @@ -1009,9 +1044,9 @@ statement, and would wait for your C to continue. The following debugger is quite functional: - { - package DB; - sub DB {} + { + package DB; + sub DB {} sub sub {print ++$i, " $sub\n"; &$sub} } @@ -1022,7 +1057,7 @@ package C. =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. @@ -1044,7 +1079,7 @@ C (C<$> or C<@>), C (subroutine name, or info about eval), C (C or a reference to an array), C, and C. -The function C prints +The function C prints formatted info about caller frames. The last two functions may be convenient as arguments to C>, CE> commands. @@ -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 -or B, the stack back-trace will not show the original values. +or B, the stack backtrace will not show the original values.