NAME
perldebug - Perl debugging
DESCRIPTION
First of all, have you tried using the
-w
switch?
Debugging
If you invoke Perl with a
-d
switch, your script will be run
under a debugging monitor. It will halt before the first executable
statement and ask you for a command, such as:
- h
-
Prints out a help message.
- T
-
Stack trace.
- s
-
Single step. Executes until it reaches the beginning of another
statement.
- n
-
Next. Executes over subroutine calls, until it reaches the beginning
of the next statement.
- f
-
Finish. Executes statements until it has finished the current
subroutine.
- c
-
Continue. Executes until the next breakpoint is reached.
- c line
-
Continue to the specified line. Inserts a one-time-only breakpoint at
the specified line.
- <CR>
-
Repeat last n or s.
- 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.
- l min-max
-
List lines in the indicated range.
- l line
-
List just the indicated line.
- l
-
List next window.
- -
-
List previous window.
- w line
-
List window around line.
- l subname
-
List subroutine. If it's a long subroutine it just lists the
beginning. Use "l" to list more.
- /pattern/
-
Regular expression search forward for pattern; the final / is optional.
- ?pattern?
-
Regular expression search backward for pattern; the final ? is optional.
- L
-
List lines that have breakpoints or actions.
- S
-
Lists the names of all subroutines.
- t
-
Toggle trace mode on or off.
- 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
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.
- b subname condition
-
Set breakpoint at first executable line of subroutine.
- d line
-
Delete breakpoint. If line is omitted, deletes the breakpoint on the
line that is about to be executed.
- D
-
Delete all breakpoints.
- a line command
-
Set an action for line. A multi-line command may be entered by
backslashing the newlines.
- A
-
Delete all line actions.
- < command
-
Set an action to happen before every debugger prompt. A multi-line
command may be entered by backslashing the newlines.
- > command
-
Set an action to happen after the prompt when you've just given a
command to return to executing the script. A multi-line command may be
entered by backslashing the newlines.
- V package
-
List all variables in package. Default is main package.
- ! number
-
Redo a debugging command. If number is omitted, redoes the previous
command.
- ! -number
-
Redo the command that was that many commands ago.
- H -number
-
Display last n commands. Only commands longer than one character are
listed. If number is omitted, lists them all.
- q or ^D
-
Quit.
- command
-
Execute command as a perl statement. A missing semicolon will be
supplied.
- p expr
-
Same as "print DB::OUT expr". The DB::OUT filehandle is opened to
/dev/tty, regardless of where STDOUT may be redirected to.
If you want to modify the debugger, copy perl5db.pl from the perl
library to another name and modify it as necessary. You'll also want
to set environment variable PERL5DB to say something like this:
BEGIN { require "myperl5db.pl" }
You can do some customization by setting up a .perldb file which
contains initialization code. For instance, you could make aliases
like these:
$DB::alias{'len'} = 's/^len(.*)/p length($1)/';
$DB::alias{'stop'} = 's/^stop (at|in)/b/';
$DB::alias{'.'} =
's/^\./p "\$DB::sub(\$DB::line):\t",\$DB::line[\$DB::line]/';
Other resources
You did try the
-w
switch, didn't you?