[sf-perl] Debugger goodness
David Alban
extasia at extasia.org
Wed Mar 1 11:56:00 PST 2006
Greetings,
In the spirit of last night's discussion, I'd like to offer some perl
debugger goodies. These are documented, but if you use the debugger
and you don't know about them, the cause of Badness in the Universe is
strengthened (and a kitten is probably killed).
The first goodie is the ability to page debugger output. Use of the
pipe character ('|') before a debugger command achieves this. E.g.:
DB<1> |x $foo
The pipe character causes the debugger to pipe the output through a
pager. So if you have a variable that creates pages and pages and
pages of output with the debugger's 'x' command, you can page that
output. Or if you want to page something that's very complicated. I
use less(1) as my pager, so not only can I page the output, but I can
operate on it in any way that less allows, like piping it through
another command (think shell command, not debugger command) or like
saving it to a file for further study/preservation.
>From perldebug:
Configurable Options
The debugger has numerous options settable using the "o"
command, either interactively or from the environment or an
rc file. (./.perldb or ~/.perldb under Unix.)
[...]
"pager" Program to use for output of pager-piped
commands (those beginning with a "|" character.)
By default, $ENV{PAGER} will be used. Because
the debugger uses your current terminal
characteristics for bold and underlining, if the
chosen pager does not pass escape sequences
through unchanged, the output of some debugger
commands will not be readable when sent through
the pager.
Another debugger goodie is the ability to run shell commands from
within the debugger:
DB<2> !!date
Wed Mar 1 11:18:45 PST 2006
by preceding them with "!!". Sure you could run them in a different
window, but the option to run them in the debugger session is there.
Another goodie: gnu readline support. In my shell environment I have:
export EDITOR=vim
And executing 'o Readline?' in the debugger shows the value for the
Readline option is 1. As a result, the debugger command line is a one
line vim window (similar to the effect on the command line of
"set -o vi" in ksh or bash). That is, I can use vim commands to do
debugger command history recall and debugger command line editing.
I'm assuming the debugger would do the right thing for:
export EDITOR=emacs
A prerequisite for this, however, is that you install Term::ReadKey
and Term::ReadLine from CPAN. Curiously, the perldebug man page says:
These do not support normal vi command-line editing, however.
But I get normal vi(m) command line editing. Strange...
The perl debugger kicks serious boo-tay, and is essential to my
personal "ide" (bash/vim/perl debugger/RCS/perldoc).
David
P.S. The other day I stumbled across wikipedia's metasyntactic
variable page (http://en.wikipedia.org/wiki/Metasyntactic_variable).
That's what foo, bar, bat, baz, etc. are called. Very entertaining
page. I encourage Joe to add Garbagio::Fantastico to the page. :-D
--
Live in a world of your own, but always welcome visitors.
More information about the SanFrancisco-pm
mailing list