X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldebug.pod;h=bccdcf4f5164772e6b056c701b5bdf2f4443a710;hb=6940069f6d5beebb5f66572e358b4e7d0c3d1c43;hp=17fe25926fe305c5fb8287c28ac5491a47f62230;hpb=a0d0e21ea6ea90a22318550944fe6cb09ae10cda;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldebug.pod b/pod/perldebug.pod index 17fe259..bccdcf4 100644 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@ -6,244 +6,947 @@ perldebug - Perl debugging First of all, have you tried using the B<-w> switch? -=head2 Debugging - -If you invoke Perl with a B<-d> switch, your script will be run under the -debugger. However, the Perl debugger is not a separate program as it is -in a C environment. Instead, the B<-d> flag tells the compiler to insert -source information into the pseudocode it's about to hand to the -interpreter. (That means your code must 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. The program -will halt before the first executable statement (but see below) and ask -you for one of the following commands: +=head1 The Perl Debugger + +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 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 +interactively to see what they do. For example: + + $ perl -d -e 42 + +In Perl, the debugger is not a separate program the way it usually is in the +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 +preloads a special Perl library file containing the debugger. + +The program will halt I the first run-time executable +statement (but see below regarding compile-time statements) and ask you +to enter a debugger command. Contrary to popular expectations, whenever +the debugger halts and shows you a line of code, it always displays the +line it's I to execute, rather than the one it has just executed. + +Any command not recognized by the debugger is directly executed +(C'd) as Perl code in the current package. (The debugger +uses the DB package for keeping its own state information.) + +For any text entered at the debugger prompt, leading and trailing whitespace +is first stripped before further processing. If a debugger command +coincides with some function in your own program, merely precede the +function with something that doesn't look like a debugger command, such +as a leading C<;> or perhaps a C<+>, or by wrapping it with parentheses +or braces. + +=head2 Debugger Commands + +The debugger understands the following commands: =over 12 -=item h +=item h [command] Prints out a help message. -=item T +If you supply another debugger command as an argument to the C command, +it prints out the description for just that command. The special +argument of C produces a more compact help listing, designed to fit +together on one screen. + +If the output of the C command (or any command, for that matter) scrolls +past your screen, precede the command with a leading pipe symbol so +that it's run through your pager, as in + + DB> |h + +You may change the pager which is used via C command. + +=item p expr + +Same as C in the current package. In particular, +because this is just Perl's own C function, this means that nested +data structures and objects are not dumped, unlike with the C command. + +The C filehandle is opened to F, regardless of +where STDOUT may be redirected to. + +=item x expr + +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 real C function in Perl. +See L if you'd like to do this yourself. + +The output format is governed by multiple options described under +L<"Options">. + +=item V [pkg [vars]] + +Display all (or some) variables in package (defaulting to C
) +using a data pretty-printer (hashes show their keys and values so +you see what's what, control characters are made printable, etc.). +Make sure you don't put the type specifier (like C<$>) there, just +the symbol names, like this: + + V DB filename line -Stack trace. -If you do bizarre things to your @_ arguments in a subroutine, the stack -backtrace will not always show the original values. +Use C<~pattern> and C for positive and negative regexes. -=item s +This is similar to calling the C command on each applicable var. -Single step. Executes until it reaches the beginning of another -statement. +=item X [vars] -=item n +Same as C. -Next. Executes over subroutine calls, until it reaches the beginning -of the next statement. +=item T + +Produce a stack backtrace. See below for details on its output. -=item f +=item s [expr] -Finish. Executes statements until it has finished the current -subroutine. +Single step. Executes until the beginning of another +statement, descending into subroutine calls. If an expression is +supplied that includes function calls, it too will be single-stepped. -=item c +=item n [expr] -Continue. Executes until the next breakpoint is reached. +Next. Executes over subroutine calls, until the beginning +of the next statement. If an expression is supplied that includes +function calls, those functions will be executed with stops before +each statement. -=item c line +=item r -Continue to the specified line. Inserts a one-time-only breakpoint at -the specified line. +Continue until the return from the current subroutine. +Dump the return value if the C option is set (default). =item -Repeat last n or s. +Repeat last C or C command. + +=item c [line|sub] + +Continue, optionally inserting a one-time-only breakpoint +at the specified line or subroutine. + +=item l + +List next window of lines. =item l min+incr -List incr+1 lines starting at min. If min is omitted, starts where -last listing left off. If incr is omitted, previous value of incr is -used. +List C lines starting at C. =item l min-max -List lines in the indicated range. +List lines C through C. C is synonymous to C<->. =item l line -List just the indicated line. +List a single line. -=item l +=item l subname -List next window. +List first window of lines from subroutine. I may +be a variable that contains a code reference. =item - -List previous window. +List previous window of lines. -=item w line +=item w [line] -List window (a few lines worth of code) around line. +List window (a few lines) around the current line. -=item l subname +=item . + +Return the internal debugger pointer to the line last +executed, and print out that line. -List subroutine. If it's a long subroutine it just lists the -beginning. Use "l" to list more. +=item f filename + +Switch to viewing a different file or C statement. If I +is not a full pathname found in the values of %INC, it is considered +a regex. + +Ced strings (when accessible) are considered to be filenames: +C and C access the body of the 7th Ced string +(in the order of execution). The bodies of the currently executed C +and of Ced strings that define subroutines are saved and thus +accessible. =item /pattern/ -Regular expression search forward in the source code for pattern; the -final / is optional. +Search forwards for pattern (a Perl regex); final / is optional. =item ?pattern? -Regular expression search backward in the source code for pattern; the -final ? is optional. +Search backwards for pattern; final ? is optional. =item L -List lines that have breakpoints or actions. +List all breakpoints and actions. -=item S +=item S [[!]regex] -Lists the names of all subroutines. +List subroutine names [not] matching the regex. =item t -Toggle trace mode on or off. +Toggle trace mode (see also the C option). + +=item t expr -=item b line [ condition ] +Trace through execution of C. +See L for examples. -Set a breakpoint. If line is omitted, sets a breakpoint on the line -that is about to be executed. If a condition is specified, it is -evaluated each time the statement is reached and a breakpoint is taken -only if the condition is true. Breakpoints may only be set on lines -that begin an executable statement. Conditions don't use C: +=item b [line] [condition] + +Set a breakpoint before the given line. If I is omitted, set a +breakpoint on the line about to be executed. If a condition +is specified, it's evaluated each time the statement is reached: a +breakpoint is taken only if the condition is true. Breakpoints may +only be set on lines that begin an executable statement. Conditions +don't use C: b 237 $x > 30 + b 237 ++$count237 < 11 b 33 /pattern/i -=item b subname [ condition ] +=item b subname [condition] + +Set a breakpoint before the first line of the named subroutine. I may +be a variable containing a code reference (in this case I +is not supported). + +=item b postpone subname [condition] + +Set a breakpoint at first line of subroutine after it is compiled. + +=item b load filename + +Set a breakpoint before the first executed line of the I, +which should be a full pathname found amongst the %INC values. + +=item b compile subname -Set breakpoint at first executable line of subroutine. +Sets a breakpoint before the first statement executed after the specified +subroutine is compiled. -=item d line +=item d [line] -Delete breakpoint. If line is omitted, deletes the breakpoint on the -line that is about to be executed. +Delete a breakpoint from the specified I. If I is omitted, deletes +the breakpoint from the line about to be executed. =item D -Delete all breakpoints. +Delete all installed breakpoints. -=item a line command +=item a [line] command -Set an action for line. A multiline command may be entered by -backslashing the newlines. This command is Perl code, not another -debugger command. +Set an action to be done before the line is executed. If I is +omitted, set an action on the line about to be executed. +The sequence of steps taken by the debugger is + + 1. check for a breakpoint at this line + 2. print the line if necessary (tracing) + 3. do any actions associated with that line + 4. prompt user if at a breakpoint or in single-step + 5. evaluate line + +For example, this will print out $foo every time line +53 is passed: + + a 53 print "DB FOUND $foo\n" + +=item a [line] + +Delete an action from the specified line. If I is omitted, delete +the action on the line that is about to be executed. =item A -Delete all line actions. +Delete all installed actions. + +=item W expr + +Add a global watch-expression. We hope you know what one of these +is, because they're supposed to be obvious. B: It is far +too easy to destroy your watch expressions by accidentally omitting +the I. + +=item W + +Delete all watch-expressions. + +=item O booloption ... + +Set each listed Boolean option to the value C<1>. + +=item O anyoption? ... + +Print out the value of one or more options. + +=item O option=value ... + +Set the value of one or more options. If the value has internal +whitespace, it should be quoted. For example, you could set C to call B with those specific options. +You may use either single or double quotes, but if you do, you must +escape any embedded instances of same sort of quote you began with, +as well as any escaping any escapes that immediately precede that +quote but which are not meant to escape the quote itself. In other +words, you follow single-quoting rules irrespective of the quote; +eg: C or C. + +For historical reasons, the C<=value> is optional, but defaults to +1 only where it is safe to do so--that is, mostly for Boolean +options. It is always better to assign a specific value using C<=>. +The C