Debugging your PERL script
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 perldb.pl from
the perl library to your current directory and modify it as
necessary. (You'll also have to put -I. on your command line.)
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]/';
Click here to go back to the Perl index
|