X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldebug.pod;h=390eb967822d843d682951d3369051de9ca313fb;hb=e40b81a3dd247b1a29fc78399677b77b78b5f183;hp=17fe25926fe305c5fb8287c28ac5491a47f62230;hpb=a0d0e21ea6ea90a22318550944fe6cb09ae10cda;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldebug.pod b/pod/perldebug.pod index 17fe259..390eb96 100644 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@ -1,4 +1,5 @@ =head1 NAME +X X perldebug - Perl debugging @@ -6,244 +7,1139 @@ 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: +If you're new to the Perl debugger, you may prefer to read +L, which is a tutorial introduction to the debugger . + +=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: +X<-d> + + $ 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.) + +Note that the said C is bound by an implicit scope. As a +result any newly introduced lexical variable or any modified +capture buffer content is lost after the eval. The debugger is a +nice environment to learn Perl, but if you interactively experiment using +material which should be in the same scope, stuff it in one line. + +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 +X -Prints out a help message. +Prints out a summary help message -=item T +=item h [command] + +Prints out a help message for the given debugger command. + +=item h h -Stack trace. -If you do bizarre things to your @_ arguments in a subroutine, the stack -backtrace will not always show the original values. +The special argument of C produces the entire help page, which is quite long. -=item s +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 -Single step. Executes until it reaches the beginning of another -statement. + DB> |h h + +You may change the pager which is used via C command. + + +=item p expr +X -=item n +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 [maxdepth] expr +X + +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. When dumping +hashes, you'll probably prefer 'x \%h' rather than 'x %h'. +See L if you'd like to do this yourself. + +The output format is governed by multiple options described under +L<"Configurable Options">. + +If the C is included, it must be a numeral I; the value is +dumped only I levels deep, as if the C option had been +temporarily set to I. + +=item V [pkg [vars]] +X + +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 + +Use C<~pattern> and C for positive and negative regexes. + +This is similar to calling the C command on each applicable var. + +=item X [vars] +X + +Same as C. + +=item y [level [vars]] +X + +Display all (or some) lexical variables (mnemonic: C variables) +in the current scope or I scopes higher. You can limit the +variables that you see with I which works exactly as it does +for the C and C commands. Requires the C module +version 0.08 or higher; will warn if this isn't installed. Output +is pretty-printed in the same style as for C and the format is +controlled by the same options. + +=item T +X X X -Next. Executes over subroutine calls, until it reaches the beginning -of the next statement. +Produce a stack backtrace. See below for details on its output. -=item f +=item s [expr] +X X -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] +X -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 +X -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] +X + +Continue, optionally inserting a one-time-only breakpoint +at the specified line or subroutine. + +=item l +X + +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 - +X -List previous window. +List previous window of lines. -=item w line +=item v [line] +X -List window (a few lines worth of code) around line. +View a few lines of code around the current line. -=item l subname +=item . +X + +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 +X + +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. +The search is case-insensitive by default. =item ?pattern? -Regular expression search backward in the source code for pattern; the -final ? is optional. +Search backwards for pattern; final ? is optional. +The search is case-insensitive by default. -=item L +=item L [abw] +X -List lines that have breakpoints or actions. +List (default all) actions, breakpoints and watch expressions -=item S +=item S [[!]regex] +X -Lists the names of all subroutines. +List subroutine names [not] matching the regex. =item t +X + +Toggle trace mode (see also the C option). + +=item t expr +X -Toggle trace mode on or off. +Trace through execution of C. +See L for examples. -=item b line [ condition ] +=item b +X +X -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: +Sets breakpoint on current line + +=item b [line] [condition] +X +X + +Set a breakpoint before the given line. 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] +X +X -Set breakpoint at first executable line of subroutine. +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 d line +=item b postpone subname [condition] +X +X -Delete breakpoint. If line is omitted, deletes the breakpoint on the -line that is about to be executed. +Set a breakpoint at first line of subroutine after it is compiled. -=item D +=item b load filename +X +X -Delete all breakpoints. +Set a breakpoint before the first executed line of the I, +which should be a full pathname found amongst the %INC values. -=item a line command +=item b compile subname +X +X -Set an action for line. A multiline command may be entered by -backslashing the newlines. This command is Perl code, not another -debugger command. +Sets a breakpoint before the first statement executed after the specified +subroutine is compiled. -=item A +=item B line +X +X -Delete all line actions. +Delete a breakpoint from the specified I. -=item < command +=item B * +X +X -Set an action to happen before every debugger prompt. A multiline -command may be entered by backslashing the newlines. +Delete all installed breakpoints. + +=item a [line] command +X + +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 +X + +Delete an action from the specified line. + +=item A * +X + +Delete all installed actions. + +=item w expr +X + +Add a global watch-expression. We hope you know what one of these +is, because they're supposed to be obvious. + +=item W expr +X + +Delete watch-expression + +=item W * +X + +Delete all watch-expressions. + +=item o +X + +Display all options + +=item o booloption ... +X + +Set each listed Boolean option to the value C<1>. + +=item o anyoption? ... +X + +Print out the value of one or more options. + +=item o option=value ... +X + +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