(C<eval>'d) as Perl code in the current package. (The debugger
uses the DB package for keeping its own state information.)
+Note that the said C<eval> is bound by an implicit scope. As a
+result any newly introduced lexical variable or any modified
+capture buffer content is lost after the eval. The debugger is a
+nice environment to learn Perl, but if you interactively experiment using
+material which should be in the same scope, stuff it in one line.
+
For any text entered at the debugger prompt, leading and trailing whitespace
is first stripped before further processing. If a debugger command
coincides with some function in your own program, merely precede the
=item V [pkg [vars]]
-Display all (or some) variables in package (defaulting to C<main>)
+Display all (or some) variables in package (defaulting to C<main>)
using a data pretty-printer (hashes show their keys and values so
you see what's what, control characters are made printable, etc.).
Make sure you don't put the type specifier (like C<$>) there, just
=item f filename
Switch to viewing a different file or C<eval> statement. If I<filename>
-is not a full pathname found in the values of %INC, it is considered
+is not a full pathname found in the values of %INC, it is considered
a regex.
C<eval>ed strings (when accessible) are considered to be filenames:
=item B line
-Delete a breakpoint from the specified I<line>.
+Delete a breakpoint from the specified I<line>.
=item B *
=item A line
-Delete an action from the specified line.
+Delete an action from the specified line.
=item A *
=item w expr
Add a global watch-expression. We hope you know what one of these
-is, because they're supposed to be obvious.
+is, because they're supposed to be obvious.
=item W expr
1 only where it is safe to do so--that is, mostly for Boolean
options. It is always better to assign a specific value using C<=>.
The C<option> can be abbreviated, but for clarity probably should
-not be. Several options can be set together. See L<"Configurable Options">
+not be. Several options can be set together. See L<"Configurable Options">
for a list of these.
-=item < ?
+=item < ?
List out all pre-prompt Perl command actions.
=item < [ command ]
Set an action (Perl command) to happen before every debugger prompt.
-A multi-line command may be entered by backslashing the newlines.
-B<WARNING> If C<command> is missing, all actions are wiped out!
+A multi-line command may be entered by backslashing the newlines.
+
+=item < *
+
+Delete all pre-prompt Perl command actions.
=item << command
Set an action (Perl command) 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 (we bet you
-couldn't've guessed this by now). B<WARNING> If C<command> is
-missing, all actions are wiped out!
+couldn't've guessed this by now).
+
+=item > *
+
+Delete all post-prompt Perl command actions.
=item >> command
=item { [ command ]
Set an action (debugger command) to happen before every debugger prompt.
-A multi-line command may be entered in the customary fashion.
-B<WARNING> If C<command> is missing, all actions are wiped out!
+A multi-line command may be entered in the customary fashion.
Because this command is in some senses new, a warning is issued if
you appear to have accidentally entered a block instead. If that's
-what you mean to do, write it as with C<;{ ... }> or even
+what you mean to do, write it as with C<;{ ... }> or even
C<do { ... }>.
+=item { *
+
+Delete all pre-prompt debugger commands.
+
=item {{ command
Add an action (debugger command) to happen before every debugger prompt.
C<exit> twice might work.
Set the C<inhibit_exit> option to 0 if you want to be able to step
-off the end the script. You may also need to set $finished to 0
+off the end the script. You may also need to set $finished to 0
if you want to step through global destruction.
=item R
=item m expr
List which methods may be called on the result of the evaluated
-expression. The expression may evaluated to a reference to a
+expression. The expression may evaluated to a reference to a
blessed object, or to a package name.
=item M
with two methods: C<IN> and C<OUT>. These should return filehandles to use
for debugging input and output correspondingly. The C<new> method should
inspect an argument containing the value of C<$ENV{PERLDB_NOTTY}> at
-startup, or C<"/tmp/perldbtty$$"> otherwise. This file is not
+startup, or C<"$ENV{HOME}/.perldbtty$$"> otherwise. This file is not
inspected for proper ownership, so security hazards are theoretically
possible.
it must be owned by the superuser or the current user, and writable
by no one but its owner.
+You can mock TTY input to debugger by adding arbitrary commands to
+@DB::typeahead. For example, your F<.perldb> file might contain:
+
+ sub afterinit { push @DB::typeahead, "b 4", "b 6"; }
+
+Which would attempt to set breakpoints on lines 4 and 6 immediately
+after debugger initilization. Note that @DB::typeahead is not a supported
+interface and is subject to change in future releases.
+
If you want to modify the debugger, copy F<perl5db.pl> from the
Perl library to another name and hack it to your heart's content.
You'll then want to set your C<PERL5DB> environment variable to say
Perl distribution was uncertain.
Users of B<vi> should also look into B<vim> and B<gvim>, the mousey
-and windy version, for coloring of Perl keywords.
+and windy version, for coloring of Perl keywords.
Note that only perl can truly parse Perl, so all such CASE tools
fall somewhat short of the mark, especially if you don't program
and
L<perlrun>.
+When debugging a script that uses #! and is thus normally found in
+$PATH, the -S option causes perl to search $PATH for it, so you don't
+have to type the path or `which $scriptname`.
+
+ $ perl -Sd foo.pl
+
=head1 BUGS
You cannot get stack frame information or in any fashion debug functions