|
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.)
recallCommand, ShellBang
- The characters used to recall command or spawn shell. By default, both are set to
!,
which is unfortunate.
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 Tk while prompting (with ReadLine).
signalLevel, warnLevel,
dieLevel
-
Level of verbosity. By default, the debugger leaves your exceptions and warnings alone,
because altering them can break correctly running programs. It will attempt to print a
message when uncaught INT, BUS, or SEGV signals arrive. (But see the mention of signals in BUGS below.)
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 discern fatal
exceptions from non-fatal ones. If dieLevel is even 1, then your non-fatal
exceptions are also traced and unceremoniously altered if they came from eval'd
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, then modifies all exceptions with its own embellishments. This may
perhaps be useful for some tracing purposes, but tends to hopelessly destroy any program
that takes its exception handling seriously.
AutoTrace
- Trace mode (similar to
t command, but can be put into PERLDB_OPTS).
LineInfo
- 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 script.
PrintRet
- Print return value after
r command if set (default).
ornaments
- Affects screen appearance of the command line (see Term::ReadLine). There is
currently no way to disable these, which can render some output illegible on some displays,
or with some pagers. This is considered a bug.
frame
-
Affects the printing of messages upon 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 is 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.
windowSize
- Change the size of code list window (default is 10 lines).
The following options affect what happens with V, X, and x
commands:
arrayDepth, hashDepth
- Print only first N elements ('' for all).
dumpDepth
- Limit recursion depth to N levels when dumping structures. Negative values are interpreted
as infinity. Default: infinity.
compactDump, veryCompact
- Change the style of array and hash output. If
compactDump, short array may be
printed on one line.
globPrint
- Whether to print contents of globs.
DumpDBFiles
- Dump arrays holding debugged files.
DumpPackages
- Dump symbol tables of packages.
DumpReused
- Dump contents of "reused" addresses.
quote, HighBit, undefPrint
- Change the style of string dump. The default value for
quote is auto;
one 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
- Rudimentary per-package memory usage dump. Calculates total size of strings found in
variables in the package. This does not include lexicals in a module's file scope, or lost
in closures.
After the rc file is read, the debugger reads the $ENV{PERLDB_OPTS} environment
variable and parses this as the remainder of a `O ...' line as one might enter at the debugger
prompt. You may place the initialization options TTY, noTTY, ReadLine,
and NonStop there.
If your rc file contains:
parse_options("NonStop=1 LineInfo=db.out AutoTrace");
|
|
then your script will run without human intervention, putting trace information into the file
db.out. (If you interrupt it, you'd better reset LineInfo to /dev/tty
if you expect to see anything.)
TTY
- The TTY to use for debugging I/O.
noTTY
-
If set, the debugger goes into NonStop mode and will not connect to a TTY.
If interrupted (or if control goes to the debugger via explicit setting of $DB::signal or $DB::single
from the Perl script), it connects to a TTY specified in the TTY option at
startup, or to a tty found at runtime using the Term::Rendezvous module of your
choice.
This module should implement a method named new that returns an object with
two methods: IN and OUT. These should return filehandles to use
for debugging input and output correspondingly. The new method should inspect
an argument containing the value of $ENV{PERLDB_NOTTY} at startup, or "/tmp/perldbtty$$"
otherwise. This file is not inspected for proper ownership, so security hazards are
theoretically possible.
ReadLine
- If false, readline support in the debugger is disabled in order to debug applications that
themselves use ReadLine.
NonStop
- If set, the debugger goes into non-interactive mode until interrupted, or programmatically
by setting $DB::signal or $DB::single.
Here's an example of using the $ENV{PERLDB_OPTS} variable:
$ PERLDB_OPTS="NonStop frame=2" perl -d myprogram
|
|
That will run the script myprogram without human intervention, printing out the call
tree with entry and exit points. Note that NonStop=1 frame=2 is equivalent to N
f=2, and that originally, options could be uniquely abbreviated by the first letter
(modulo the Dump* options). It is nevertheless recommended that you always spell
them out in full for legibility and future compatibility.
Other examples include
$ PERLDB_OPTS="NonStop LineInfo=listing frame=2" perl -d myprogram
|
|
which runs script non-interactively, printing info on each entry into a subroutine and each
executed line into the file named listing. (If you interrupt it, you would better reset LineInfo
to something "interactive"!)
Other examples include (using standard shell syntax to show environment variable settings):
$ ( PERLDB_OPTS="NonStop frame=1 AutoTrace LineInfo=tperl.out"
perl -d myprogram )
|
|
which may be useful for debugging a program that uses Term::ReadLine itself. Do
not forget to detach your shell from the TTY in the window that corresponds to /dev/ttyXX,
say, by issuing a command like
See perldebguts/"Debugger
Internals" for details.
|
|