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. |
| "> |
| 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="">> 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]/';
No comments:
Post a Comment