Perl Debugging

by Geethalakshmi 2010-09-17 12:53:37

Perl 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.
`'
Repeat last n or s.
`n'
Single step around subroutine call.
`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 (number) commands ago.
`H -number'
Display last number commands. Only commands longer than one character are listed. If number is omitted, lists them all.
`q'
`^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]/';

Tagged in:

802
like
0
dislike
0
mail
flag

You must LOGIN to add comments