20.3. Debugger Customization
The debugger probably contains enough configuration hooks that you'll
never have to modify it yourself. You may change the behavior
of debugger from within the debugger using its O command, from
the command line via the PERLDB_OPTS environment variable, and by running any preset commands stored in rc files.
20.3.1. Editor Support for Debugging
The debugger's command-line history mechanism doesn't provide
command-line editing like many shells do: you can't retrieve previous
lines with ^p, or move to the beginning of the line with ^a,
although you can execute previous lines with using the exclamation
point syntax familiar to shell users. However, if you install the
Term::ReadKey and Term::ReadLine modules from CPAN, you will have full
editing capabilities similar to what GNU readline(3) provides.
If you have emacs installed on your system, it can interact with
the Perl debugger to provide an integrated software development
environment reminiscent of its interactions with C debuggers. Perl
comes with a start file for making emacs act like a syntax-directed
editor that understands (some of) Perl's syntax. Look in the emacs
directory of the Perl source distribution. Users of vi should also
look into vim (and gvim, the mousey and windy version) for
coloring of Perl keywords.
A similar setup by one of us (Tom) for interacting with any
vendor-shipped vi and the X11 window system is also available.
This works similarly to the integrated multiwindow support that
emacs provides, where the debugger drives the editor. However,
at the time of this writing, its eventual location in the Perl
distribution is uncertain. But we thought you should know of the
possibility.
20.3.2. Customizing with Init Files
You can do some customization by setting up either a .perldb or perldb.ini file (depending on your
operating system), which
contains initialization code. This init file holds Perl code, not
debugger commands, and is processed before the PERLDB_OPTS
environment variable is looked at. For instance, you could make
aliases by adding entries to the %DB::alias hash this way:
$alias{len} = 's/^len(.*)/p length($1)/';
$alias{stop} = 's/^stop (at|in)/b/';
$alias{ps} = 's/^ps\b/p scalar /';
$alias{quit} = 's/^quit(\s*)/exit/';
$alias{help} = 's/^help\s*$/|h/';
You can change options from within your init file using function
calls into the debugger's internal API:
parse_options("NonStop=1 LineInfo=db.out AutoTrace=1 frame=2");
If your init file defines the subroutine afterinit, that function is
called after debugger initialization ends. The init file may be
located in the current directory or in the home directory. Because
this file contains arbitrary Perl commands, for security reasons, it
must be owned by the superuser or the current user, and writable by no
one but its owner.
If you want to modify the debugger, copy perl5db.pl from the
Perl library to another name and hack it to your heart's content.
You'll then want to set your PERL5DB environment variable to say
something like this:
BEGIN { require "myperl5db.pl" }
As a last resort, you could also use PERL5DB to customize the
debugger by directly setting internal variables or calling internal
debugger functions. Be aware, though, that any variables and
functions not documented either here or else in the online
perldebug, perldebguts, or DB manpages are considered
to be for internal use only and are subject to change without
notice.
20.3.3. Debugger Options
The debugger has numerous options that you can set with the O
command, either interactively or from the environment or from an
init file.
-
recallCommand, ShellBang
-
The characters used to recall a command or spawn a shell. By default,
both are set to !.
-
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.
-
tkRunning
-
Run under the Tk module while prompting (with ReadLine).
-
signalLevel, warnLevel, dieLevel
-
Set the level of verbosity. By default, the debugger leaves your exceptions
and warnings alone because altering them can break correctly running
programs.
To disable this default safe mode, set these values to something
higher than 0. At a level of 1, you get backtraces upon receiving any
kind of warning (this is often annoying) or exception (this is often
valuable). Unfortunately, the debugger cannot distinguish fatal
exceptions from nonfatal ones. If dieLevel is 1, then your
nonfatal exceptions are also traced and unceremoniously altered if
they came from evaled strings or from any kind of eval within
modules you're attempting to load. If dieLevel is 2, the debugger
doesn't care where they came from: it usurps your exception handler
and prints out a trace, and then modifies all exceptions with its own
embellishments. This may perhaps be useful for some tracing purposes,
but it tends to hopelessly confuse any program that takes its exception
handling seriously.
The debugger will attempt to print a message when any uncaught INT,
BUS, or SEGV signal arrives. If you're in a slow syscall (like
a wait or an accept, or a read from your keyboard or a
socket) and haven't set up your own $SIG{INT} handler, then you
won't be able to Control-C your way back to the debugger, because the
debugger's own $SIG{INT} handler doesn't understand that it needs
to raise an exception to longjmp(3) out of slow syscalls.
-
AutoTrace
-
Set the trace mode (similar to t command, but can be put into
PERLDB_OPTS).
-
LineInfo
-
Assign the file or pipe to print line number info to. If it is a pipe (say,
|visual_perl_db), then a short message is used. This is the
mechanism used to interact with a slave editor or visual debugger,
such as the special vi or emacs hooks, or the ddd graphical
debugger.
-
inhibit_exit
-
If 0, allows stepping off the end of the program.
-
PrintRet
-
Print return value after r command if set (default).
-
ornaments
-
Affects screen appearance of the command line (see the online docs for
Term::ReadLine). There is currently no way to disable ornaments, which
can render some output illegible on some displays or with some
pagers. This is considered a bug.
-
frame
-
Affects printing of messages on entry and exit from subroutines. If
frame & 2 is false, messages are printed on entry only. (Printing
on exit might be useful if interspersed with other messages.)
If frame & 4, arguments to functions are printed, plus context
and caller info. If frame & 8, overloaded stringify and
tied FETCH are enabled on the printed arguments.
If frame & 16, the return value from the subroutine is printed.
The length at which the argument list is truncated is governed by the
next option.
-
maxTraceLen
-
Length to truncate the argument list when the frame option's
bit 4 is set.
The following options affect what happens with the V, X, and x
commands:
-
arrayDepth, hashDepth
-
Print only the first n elements. If n is omitted, all of the elements will be printed.
-
compactDump, veryCompact
-
Change the style of array and hash output. If compactDump is
enabled, short arrays may be printed on one line.
-
globPrint
-
Print contents of typeglobs.
-
DumpDBFiles
-
Display arrays holding debugged files.
-
DumpPackages
-
Display symbol tables of packages.
-
DumpReused
-
Display contents of "reused" addresses.
-
quote, HighBit, undefPrint
-
Change the style of string display. The default value for quote
is auto; you can enable double-quotish or single-quotish format
by setting it to " or ', respectively. By default, characters
with their high bit set are printed verbatim.
-
UsageOnly
-
Instead of showing the contents of a package's variables, with this
option enabled, you get a rudimentary per-package memory usage dump
based on the total size of the strings found in package variables. Because the package symbol table is used, lexical variables are
ignored.
| | |
20.2. Debugger Commands | | 20.4. Unattended Execution |
Copyright © 2001 O'Reilly & Associates. All rights reserved.
|
|