X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldebug.pod;h=32c2ebf78efa3bcfd500b7978d71f7000b29cb25;hb=a2eb900354d7492c5b0c2f521e88387de8974900;hp=17fe25926fe305c5fb8287c28ac5491a47f62230;hpb=a0d0e21ea6ea90a22318550944fe6cb09ae10cda;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldebug.pod b/pod/perldebug.pod index 17fe259..32c2ebf 100644 --- a/pod/perldebug.pod +++ b/pod/perldebug.pod @@ -6,144 +6,337 @@ 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 as 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 +pre-loads 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 +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 its own state information.) + +Leading white space before a command would cause the debugger to think +it's I a debugger command but for Perl, so be careful not to do +that. + +=head2 Debugger Commands + +The debugger understands the following commands: =over 12 -=item h +=item h [command] + +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 +argument of C produces a more compact help listing, designed to fit +together on one screen. + +If the output the C command (or any command, for that matter) scrolls +past your screen, either precede the command with a leading pipe symbol so +it's run through your pager, as in + + DB> |h + +=item p expr + +Same as C in the current package. In particular, +since this is just Perl's own B function, this means that nested +data structures and objects are not dumped, unlike with the C command. + +=item x expr + +Evals 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. + +=item V [pkg [vars]] + +Display all (or some) variables in package (defaulting to the C
+package) 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 regexps. -Prints out a help message. +Nested data structures are printed out in a legible fashion, unlike +the C function. + +=item X [vars] + +Same as C. =item T -Stack trace. -If you do bizarre things to your @_ arguments in a subroutine, the stack -backtrace will not always show the original values. +Produce a stack backtrace. See below for details on its output. -=item s +=item s [expr] Single step. Executes until it reaches the beginning of another -statement. +statement, descending into subroutine calls. If an expression is +supplied that includes function calls, it too will be single-stepped. =item n Next. Executes over subroutine calls, until it reaches the beginning of the next statement. -=item f - -Finish. Executes statements until it has finished the current -subroutine. - -=item c +=item -Continue. Executes until the next breakpoint is reached. +Repeat last C or C command. -=item c line +=item c [line] -Continue to the specified line. Inserts a one-time-only breakpoint at -the specified line. +Continue, optionally inserting a one-time-only breakpoint +at the specified line. -=item +=item l -Repeat last n or s. +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. =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. =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 . -List subroutine. If it's a long subroutine it just lists the -beginning. Use "l" to list more. +Return debugger pointer to the last-executed line and +print it out. + +=item f filename + +Switch to viewing a different file. =item /pattern/ -Regular expression search forward in the source code for pattern; the -final / is optional. +Search forwards for pattern; 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 for the current file. -=item S +=item S [[!]pattern] -Lists the names of all subroutines. +List subroutine names [not] matching pattern. =item t -Toggle trace mode on or off. +Toggle trace mode. + +=item t expr + +Trace through execution of expr. For example: + + $ perl -de 42 + Stack dump during die enabled outside of evals. -=item b line [ condition ] + Loading DB routines from perl5db.pl patch level 0.94 + Emacs support available. + + Enter h or `h h' for help. + + main::(-e:1): 0 + DB<1> sub foo { 14 } + + DB<2> sub bar { 3 } + + DB<3> t print foo() * bar() + main::((eval 172):3): print foo() + bar(); + main::foo((eval 168):2): + main::bar((eval 170):2): + 42 + DB<4> q + +=item b [line] [condition] 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 +that is about to be executed. If a condition is specified, it's 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: +that begin an executable statement. Conditions don't use B: b 237 $x > 30 b 33 /pattern/i -=item b subname [ condition ] +=item b subname [condition] -Set breakpoint at first executable line of subroutine. +Set a breakpoint at the first line of the named subroutine. -=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 at the specified line. If line is omitted, deletes +the breakpoint on the line that is about to be executed. =item D -Delete all breakpoints. +Delete all installed breakpoints. + +=item a [line] command + +Set an action to be done before the line is executed. +The sequence of steps taken by the debugger is + +=over 3 + +=item 1 + +check for a breakpoint at this line + +=item 2 + +print the line if necessary (tracing) + +=item 3 + +do any actions associated with that line + +=item 4 + +prompt user if at a breakpoint or in single-step + +=item 5 + +evaluate line + +=back -=item a line command +For example, this will print out C<$foo> every time line +53 is passed: -Set an action for line. A multiline command may be entered by -backslashing the newlines. This command is Perl code, not another -debugger command. + a 53 print "DB FOUND $foo\n" =item A -Delete all line actions. +Delete all installed actions. + +=item O [opt[=val]] [opt"val"] [opt?]... + +Set or query values of options. val defaults to 1. opt can +be abbreviated. Several options can be listed. + +=over 12 + +=item recallCommand, ShellBang + +The characters used to recall command or spawn shell. By +default, these are both set to C. + +=item pager + +Program to use for output of pager-piped commands (those +beginning with a C<|> character.) By default, +C<$ENV{PAGER}> will be used. + +=back + +The following options affect what happens with C, C, and C +commands: + +=over 12 + +=item arrayDepth, hashDepth + +Print only first N elements ('' for all). + +=item compactDump, veryCompact + +Change style of array and hash dump. + +=item globPrint + +Whether to print contents of globs. + +=item DumpDBFiles + +Dump arrays holding debugged files. + +=item DumpPackages + +Dump symbol tables of packages. + +=item quote, HighBit, undefPrint + +Change style of string dump. + +=item tkRunning + +Run Tk while prompting (with ReadLine). + +=item signalLevel, warnLevel. dieLevel + +Level of verbosity. + +=back + +The option C affects printing of return value after C +command, The option C affects printing messages on entry and exit +from subroutines. If C is 1, messages are printed on entry only; +if it's set to more than that, they'll will be printed on exit as well, +which may be useful if interdispersed with other messages. + +During startup options are initialized from $ENV{PERLDB_OPTS}. +You can put additional initialization options C, C, +C, and C there. Here's an example of using +the C<$ENV{PERLDB_OPTS}> variable: + + $ PERLDB_OPTS="N f=2" perl -d myprogram + +will run the script C without human intervention, printing +out the call tree with entry and exit points. Note that C is +equivalent to C. 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. + +See "Debugger Internals" below for more details. =item < command @@ -156,28 +349,23 @@ Set an action to happen after the prompt when you've just given a command to return to executing the script. A multiline command may be entered by backslashing the newlines. -=item V package [symbols] - -Display all (or some) variables in package (defaulting to the C
-package) 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 $) there, just the symbol -names, like this: +=item ! number - V DB filename line +Redo a previous command (default previous command). -=item X [symbols] +=item ! -number -Same as as "V" command, but within the current package. +Redo number'th-to-last command. -=item ! number +=item ! pattern -Redo a debugging command. If number is omitted, redoes the previous -command. +Redo last command that started with pattern. +See C, too. -=item ! -number +=item !! cmd -Redo the command that was that many commands ago. +Run cmd in a subprocess (reads from DB::IN, writes to DB::OUT) +See C too. =item H -number @@ -188,6 +376,28 @@ listed. If number is omitted, lists them all. Quit. ("quit" doesn't work for this.) +=item R + +Restart the debugger by Bing a new session. It tries to maintain +your history across this, but internal settings and command line options +may be lost. + +=item |dbcmd + +Run debugger command, piping DB::OUT to current pager. + +=item ||dbcmd + +Same as C<|dbcmd> but DB::OUT is temporarily B