mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-24 11:41:58 +00:00
Modified db man page.
This commit is contained in:
parent
bf8a59fa01
commit
6e18e03e63
1 changed files with 976 additions and 0 deletions
976
man/man1/db.1
Normal file
976
man/man1/db.1
Normal file
|
@ -0,0 +1,976 @@
|
|||
.TH DB 1
|
||||
.SH NAME
|
||||
db \- debugger
|
||||
.SH SYNOPSIS
|
||||
.B db
|
||||
[
|
||||
.I option ...
|
||||
]
|
||||
[
|
||||
.I textfile
|
||||
]
|
||||
[
|
||||
.I pid
|
||||
|
|
||||
.I corefile
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
.I Db
|
||||
is a general purpose debugging program.
|
||||
It may be used to examine files and to provide
|
||||
a controlled environment for the execution
|
||||
of programs.
|
||||
.PP
|
||||
A
|
||||
.I textfile
|
||||
is a file containing the text and initialized
|
||||
data of an executable program.
|
||||
A
|
||||
.I pid
|
||||
or
|
||||
.I corefile
|
||||
specifies the memory image of a process.
|
||||
A
|
||||
.I pid
|
||||
gives the id of an executing process to be accessed via
|
||||
.IR ptrace (2)
|
||||
or
|
||||
.IR proc (5).
|
||||
A
|
||||
.I corefile
|
||||
specifies the name of a core dump (see
|
||||
.IR core (5)
|
||||
on your system of choice) containing the
|
||||
memory image of a terminated process.
|
||||
This manual refers to the memory image specified by
|
||||
.I pid
|
||||
or
|
||||
.I corefile
|
||||
as a
|
||||
.IR memfile .
|
||||
.PP
|
||||
A
|
||||
.I map
|
||||
associated with each
|
||||
.I textfile
|
||||
or
|
||||
.I memfile
|
||||
supports accesses to instructions and data in the file;
|
||||
see `Addresses'.
|
||||
.PP
|
||||
An argument consisting entirely of digits is assumed
|
||||
to be a process id; otherwise, it is the name of a
|
||||
.I textfile
|
||||
or
|
||||
.IR corefile .
|
||||
When a
|
||||
.I textfile
|
||||
is given, the textfile map
|
||||
is associated with it.
|
||||
If only a
|
||||
.I memfile
|
||||
is given, the textfile map is
|
||||
derived from the corresponding
|
||||
.IR textfile ,
|
||||
if it can be determined
|
||||
(this varies from system to system).
|
||||
When a
|
||||
.I memfile
|
||||
is given, the memfile map is associated with it;
|
||||
otherwise the map is undefined and accesses to it
|
||||
are not permitted.
|
||||
.PP
|
||||
Commands to
|
||||
.I db
|
||||
are read from the standard input and
|
||||
responses are to the standard output.
|
||||
The options are
|
||||
.TP
|
||||
.B -w
|
||||
Open
|
||||
.I textfile
|
||||
and
|
||||
.I memfile
|
||||
for writing as well as reading.
|
||||
.TP
|
||||
.BI -I path
|
||||
Directory in which to look for relative path names in
|
||||
.B $<
|
||||
and
|
||||
.B $<<
|
||||
commands.
|
||||
.TP
|
||||
.BI -m machine
|
||||
Assume instructions are for the given CPU type
|
||||
(possible names include
|
||||
.B 386
|
||||
and
|
||||
.BR powerpc ;
|
||||
adding
|
||||
the suffix
|
||||
.B -co
|
||||
as in
|
||||
.B 386-co
|
||||
and
|
||||
.B powerpc-co
|
||||
selects disassembly in the manufacturer's syntax, if
|
||||
available,
|
||||
rather than the default Plan 9 syntax).
|
||||
.PP
|
||||
Most
|
||||
.I db
|
||||
commands have the following form:
|
||||
.IP
|
||||
.RI [ address ]
|
||||
.RB [ ,
|
||||
.IR count ]
|
||||
.RI [ command ]
|
||||
.PP
|
||||
If
|
||||
.I address
|
||||
is present then the current position, called `dot',
|
||||
is set to
|
||||
.IR address .
|
||||
Initially dot
|
||||
is set to 0.
|
||||
Most commands are repeated
|
||||
.I count
|
||||
times with
|
||||
dot advancing between repetitions.
|
||||
The default
|
||||
.I count
|
||||
is 1.
|
||||
.I Address
|
||||
and
|
||||
.I count
|
||||
are expressions.
|
||||
Multiple commands on one line must be separated by
|
||||
.LR ; .
|
||||
.SS Expressions
|
||||
Expressions are evaluated as long
|
||||
.IR ints .
|
||||
.TP 7.2n
|
||||
.B .
|
||||
The value of dot.
|
||||
.TP 7.2n
|
||||
.B +
|
||||
The value of dot
|
||||
incremented by the current increment.
|
||||
.TP 7.2n
|
||||
.B ^
|
||||
The value of dot
|
||||
decremented by the current increment.
|
||||
.TP 7.2n
|
||||
.B \&"
|
||||
The last
|
||||
.I address
|
||||
typed.
|
||||
.TP 7.2n
|
||||
.I integer
|
||||
A number, in decimal radix by default.
|
||||
The prefixes
|
||||
.L 0
|
||||
and
|
||||
.L 0o
|
||||
and
|
||||
.L 0O
|
||||
(zero oh) force interpretation
|
||||
in octal radix; the prefixes
|
||||
.L 0t
|
||||
and
|
||||
.L 0T
|
||||
force interpretation in
|
||||
decimal radix; the prefixes
|
||||
.LR 0x ,
|
||||
.LR 0X ,
|
||||
and
|
||||
.L #
|
||||
force interpretation in
|
||||
hexadecimal radix.
|
||||
Thus
|
||||
.LR 020 ,
|
||||
.LR 0o20 ,
|
||||
.LR 0t16 ,
|
||||
and
|
||||
.L #10
|
||||
all represent sixteen.
|
||||
.TP 7.2n
|
||||
.IB integer . fraction
|
||||
A single-precision floating point number.
|
||||
.TP 7.2n
|
||||
.BI \' c\| \'
|
||||
The
|
||||
16-bit
|
||||
value of a character.
|
||||
.L \e
|
||||
may be used to escape a
|
||||
.LR \' .
|
||||
.TP 7.2n
|
||||
.BI < name
|
||||
The value of
|
||||
.IR name ,
|
||||
which is a register name.
|
||||
The register names are
|
||||
those printed by the
|
||||
.B $r
|
||||
command.
|
||||
.TP 7.2n
|
||||
.I symbol
|
||||
A
|
||||
.I symbol
|
||||
is a sequence
|
||||
of upper or lower case letters, underscores or
|
||||
digits, not starting with a digit.
|
||||
.L \e
|
||||
may be used to escape other characters.
|
||||
The location of the
|
||||
.I symbol
|
||||
is calculated from the symbol table
|
||||
in
|
||||
.IR textfile .
|
||||
.TP 7.2n
|
||||
.IB routine . name
|
||||
The address of the variable
|
||||
.I name
|
||||
in the specified
|
||||
C routine.
|
||||
Both
|
||||
.I routine
|
||||
and
|
||||
.I name
|
||||
are
|
||||
.IR symbols .
|
||||
If
|
||||
.I name
|
||||
is omitted the value is the address of the
|
||||
most recently activated stack frame
|
||||
corresponding to
|
||||
.IR routine ;
|
||||
if
|
||||
.I routine
|
||||
is omitted,
|
||||
the active procedure
|
||||
is assumed.
|
||||
.TP 7.2n
|
||||
.IB file : integer
|
||||
The address of the instruction corresponding
|
||||
to the source statement at the indicated
|
||||
line number of the file. If the source line contains
|
||||
no executable statement, the address of the
|
||||
instruction associated with the nearest
|
||||
executable source line is returned. Files
|
||||
begin at line 1. If multiple files of the same
|
||||
name are loaded, an expression of this form resolves
|
||||
to the first file encountered in the symbol table.
|
||||
.TP 7.2n
|
||||
.BI ( exp )
|
||||
The value of the expression
|
||||
.IR exp .
|
||||
.LP
|
||||
.I Monadic operators
|
||||
.RS
|
||||
.TP 7.2n
|
||||
.BI * exp
|
||||
The contents of the location addressed
|
||||
by
|
||||
.I exp
|
||||
in
|
||||
.IR memfile .
|
||||
.TP 7.2n
|
||||
.BI @ exp
|
||||
The contents of the location addressed by
|
||||
.I exp
|
||||
in
|
||||
.IR textfile .
|
||||
.TP 7.2n
|
||||
.BI - exp
|
||||
Integer negation.
|
||||
.TP 7.2n
|
||||
.BI ~ exp
|
||||
Bitwise complement.
|
||||
.TP 7.2n
|
||||
.BI % exp
|
||||
When used as an
|
||||
.IR address ,
|
||||
.I exp
|
||||
is an offset into the segment named
|
||||
.IR ublock ;
|
||||
see `Addresses'.
|
||||
.RE
|
||||
.LP
|
||||
.I "Dyadic\ operators"
|
||||
are left-associative
|
||||
and are less binding than monadic operators.
|
||||
.RS
|
||||
.TP 7.2n
|
||||
.IB e1 + e2
|
||||
Integer addition.
|
||||
.TP 7.2n
|
||||
.IB e1 - e2
|
||||
Integer subtraction.
|
||||
.TP 7.2n
|
||||
.IB e1 * e2
|
||||
Integer multiplication.
|
||||
.TP 7.2n
|
||||
.IB e1 % e2
|
||||
Integer division.
|
||||
.TP 7.2n
|
||||
.IB e1 & e2
|
||||
Bitwise conjunction.
|
||||
.TP 7.2n
|
||||
.IB e1 | e2
|
||||
Bitwise disjunction.
|
||||
.TP 7.2n
|
||||
.IB e1 # e2
|
||||
.I E1
|
||||
rounded up to the next multiple of
|
||||
.IR e2 .
|
||||
.RE
|
||||
.DT
|
||||
.SS Commands
|
||||
Most commands have the following syntax:
|
||||
.TP .5i
|
||||
.BI ? f
|
||||
Locations starting at
|
||||
.I address
|
||||
in
|
||||
.I textfile
|
||||
are printed according to the format
|
||||
.IR f .
|
||||
.TP
|
||||
.BI / f
|
||||
Locations starting at
|
||||
.I address
|
||||
in
|
||||
.I memfile
|
||||
are printed according to the format
|
||||
.IR f .
|
||||
.TP
|
||||
.BI = f
|
||||
The value of
|
||||
.I address
|
||||
itself is printed according to the format
|
||||
.IR f .
|
||||
.PP
|
||||
A
|
||||
.I format
|
||||
consists of one or more characters that specify a style
|
||||
of printing.
|
||||
Each format character may be preceded by a decimal integer
|
||||
that is a repeat count for the format character.
|
||||
If no format is given then the last format is used.
|
||||
.PP
|
||||
Most format letters fetch some data,
|
||||
print it,
|
||||
and advance (a local copy of) dot
|
||||
by the number of bytes fetched.
|
||||
The total number of bytes in a format becomes the
|
||||
.IR current increment .
|
||||
.ta 2.5n .5i
|
||||
.RS
|
||||
.TP
|
||||
.PD 0
|
||||
.B o
|
||||
Print two-byte integer in octal.
|
||||
.TP
|
||||
.B O
|
||||
Print four-byte integer in octal.
|
||||
.TP
|
||||
.B q
|
||||
Print two-byte integer in signed octal.
|
||||
.TP
|
||||
.B Q
|
||||
Print four-byte integer in signed octal.
|
||||
.TP
|
||||
.B d
|
||||
Print two-byte integer in decimal.
|
||||
.TP
|
||||
.B D
|
||||
Print four-byte integer in decimal.
|
||||
.TP
|
||||
.B V
|
||||
Print eight-byte integer in decimal.
|
||||
.TP
|
||||
.B Z
|
||||
Print eight-byte integer in unsigned decimal.
|
||||
.TP
|
||||
.B x
|
||||
Print two-byte integer in hexadecimal.
|
||||
.TP
|
||||
.B X
|
||||
Print four-byte integer in hexadecimal.
|
||||
.TP
|
||||
.B Y
|
||||
Print eight-byte integer in hexadecimal.
|
||||
.TP
|
||||
.B u
|
||||
Print two-byte integer in unsigned decimal.
|
||||
.TP
|
||||
.B U
|
||||
Print four-byte integer in unsigned decimal.
|
||||
.TP
|
||||
.B f
|
||||
Print
|
||||
as a single-precision floating point number.
|
||||
.TP
|
||||
.B F
|
||||
Print double-precision floating point.
|
||||
.TP
|
||||
.B b
|
||||
Print the addressed byte in hexadecimal.
|
||||
.TP
|
||||
.B c
|
||||
Print the addressed byte as an
|
||||
.SM ASCII
|
||||
character.
|
||||
.TP
|
||||
.B C
|
||||
Print the addressed byte as a character.
|
||||
Printable
|
||||
.SM ASCII
|
||||
characters
|
||||
are represented normally; others
|
||||
are printed in the form
|
||||
.BR \exnn .
|
||||
.TP
|
||||
.B s
|
||||
Print the addressed characters, as a
|
||||
.SM UTF
|
||||
string, until a zero byte
|
||||
is reached.
|
||||
Advance dot
|
||||
by the length of the string,
|
||||
including the zero terminator.
|
||||
.TP
|
||||
.B S
|
||||
Print a string using
|
||||
the escape convention (see
|
||||
.B C
|
||||
above).
|
||||
.TP
|
||||
.B r
|
||||
Print as
|
||||
.SM UTF
|
||||
the addressed two-byte integer (rune).
|
||||
.TP
|
||||
.B R
|
||||
Print as
|
||||
.SM UTF
|
||||
the addressed two-byte integers as runes
|
||||
until a zero rune is reached.
|
||||
Advance dot
|
||||
by the length of the string,
|
||||
including the zero terminator.
|
||||
.TP
|
||||
.B i
|
||||
Print as machine instructions. Dot is
|
||||
incremented by the size of the instruction.
|
||||
.TP
|
||||
.B I
|
||||
As
|
||||
.B i
|
||||
above, but print the machine instructions in
|
||||
an alternate form if possible.
|
||||
.TP
|
||||
.B M
|
||||
Print the addressed machine instruction in a
|
||||
machine-dependent hexadecimal form.
|
||||
.TP
|
||||
.B a
|
||||
Print the value of dot
|
||||
in symbolic form.
|
||||
Dot is unaffected.
|
||||
.TP
|
||||
.B A
|
||||
Print the value of dot
|
||||
in hexadecimal.
|
||||
Dot is unaffected.
|
||||
.TP
|
||||
.B z
|
||||
Print the function name, source file, and line number
|
||||
corresponding to dot (textfile only). Dot is unaffected.
|
||||
.TP
|
||||
.B p
|
||||
Print the addressed value in symbolic form.
|
||||
Dot is advanced by the size of a machine address.
|
||||
.TP
|
||||
.B t
|
||||
When preceded by an integer, tabs to the next
|
||||
appropriate tab stop.
|
||||
For example,
|
||||
.B 8t
|
||||
moves to the next 8-space tab stop.
|
||||
Dot is unaffected.
|
||||
.TP
|
||||
.B n
|
||||
Print a newline.
|
||||
Dot is unaffected.
|
||||
.tr '"
|
||||
.TP
|
||||
.BR ' ... '
|
||||
Print the enclosed string.
|
||||
Dot is unaffected.
|
||||
.br
|
||||
.tr ''
|
||||
.TP
|
||||
.B ^
|
||||
Dot is decremented by the current increment.
|
||||
Nothing is printed.
|
||||
.TP
|
||||
.B +
|
||||
Dot is incremented by 1.
|
||||
Nothing is printed.
|
||||
.TP
|
||||
.B -
|
||||
Dot is decremented by 1.
|
||||
Nothing is printed.
|
||||
.RE
|
||||
.PD
|
||||
.LP
|
||||
Other commands include:
|
||||
.TP
|
||||
newline
|
||||
Update dot by the current increment.
|
||||
Repeat the previous command with a
|
||||
.I count
|
||||
of 1.
|
||||
.TP
|
||||
.RB [ ?/ ] l "\fI value mask\fR"
|
||||
Words starting at dot
|
||||
are masked with
|
||||
.I mask
|
||||
and compared with
|
||||
.I value
|
||||
until
|
||||
a match is found.
|
||||
If
|
||||
.B l
|
||||
is used,
|
||||
the match is for a two-byte integer;
|
||||
.B L
|
||||
matches four bytes.
|
||||
If no match is found then dot
|
||||
is unchanged; otherwise dot
|
||||
is set to the matched location.
|
||||
If
|
||||
.I mask
|
||||
is omitted then ~0 is used.
|
||||
.TP
|
||||
.RB [ ?/ ] w "\fI value ...\fR"
|
||||
Write the two-byte
|
||||
.I value
|
||||
into the addressed
|
||||
location.
|
||||
If the command is
|
||||
.BR W ,
|
||||
write four bytes.
|
||||
.TP
|
||||
.RB [ ?/ ] "m\fI s b e f \fP" [ ?\fR]
|
||||
.br
|
||||
New values for
|
||||
.RI ( b,\ e,\ f )
|
||||
in the segment named
|
||||
.I s
|
||||
are recorded. Valid segment names are
|
||||
.IR text ,
|
||||
.IR data ,
|
||||
or
|
||||
.IR ublock .
|
||||
If less than three address expressions are given,
|
||||
the remaining parameters are left unchanged.
|
||||
If the list is terminated by
|
||||
.L ?
|
||||
or
|
||||
.L /
|
||||
then the file
|
||||
.RI ( textfile
|
||||
or
|
||||
.I memfile
|
||||
respectively) is used
|
||||
for subsequent requests.
|
||||
For example,
|
||||
.L /m?
|
||||
causes
|
||||
.L /
|
||||
to refer to
|
||||
.IR textfile .
|
||||
.TP
|
||||
.BI > name
|
||||
Dot is assigned to the variable or register named.
|
||||
.TP
|
||||
.B !
|
||||
The rest of the line is passed to
|
||||
.IR rc (1)
|
||||
for execution.
|
||||
.TP
|
||||
.BI $ modifier
|
||||
Miscellaneous commands.
|
||||
The available
|
||||
.I modifiers
|
||||
are:
|
||||
.RS
|
||||
.TP
|
||||
.PD 0
|
||||
.BI < f
|
||||
Read commands from the file
|
||||
.IR f .
|
||||
If this command is executed in a file, further commands
|
||||
in the file are not seen.
|
||||
If
|
||||
.I f
|
||||
is omitted, the current input stream is terminated.
|
||||
If a
|
||||
.I count
|
||||
is given, and is zero, the command is ignored.
|
||||
.TP
|
||||
.BI << f
|
||||
Similar to
|
||||
.B <
|
||||
except it can be used in a file of commands without
|
||||
causing the file to be closed.
|
||||
There is a (small) limit to the number of
|
||||
.B <<
|
||||
files that can be open at once.
|
||||
.br
|
||||
.ns
|
||||
.TP
|
||||
.BI > f
|
||||
Append output to the file
|
||||
.IR f ,
|
||||
which is created if it does not exist.
|
||||
If
|
||||
.I f
|
||||
is omitted, output is returned to the terminal.
|
||||
.TP
|
||||
.B ?
|
||||
Print process id, the condition which caused stopping or termination,
|
||||
the registers and the instruction addressed by
|
||||
.BR pc .
|
||||
This is the default if
|
||||
.I modifier
|
||||
is omitted.
|
||||
.TP
|
||||
.B r
|
||||
Print the general registers and
|
||||
the instruction addressed by
|
||||
.BR pc .
|
||||
Dot is set to
|
||||
.BR pc .
|
||||
.TP
|
||||
.B R
|
||||
Like
|
||||
.BR $r ,
|
||||
but include miscellaneous processor control registers
|
||||
and floating point registers.
|
||||
.TP
|
||||
.B f
|
||||
Print floating-point register values as
|
||||
single-precision floating point numbers.
|
||||
.TP
|
||||
.B F
|
||||
Print floating-point register values as
|
||||
double-precision floating point numbers.
|
||||
.TP
|
||||
.B b
|
||||
Print all breakpoints
|
||||
and their associated counts and commands. `B' produces the same results.
|
||||
.TP
|
||||
.B c
|
||||
Stack backtrace.
|
||||
If
|
||||
.I address
|
||||
is given, it specifies the address of a pair of 32-bit
|
||||
values containing the
|
||||
.B sp
|
||||
and
|
||||
.B pc
|
||||
of an active process. This allows selecting
|
||||
among various contexts of a multi-threaded
|
||||
process.
|
||||
If
|
||||
.B C
|
||||
is used, the names and (long) values of all
|
||||
parameters,
|
||||
automatic
|
||||
and static variables are printed for each active function.
|
||||
If
|
||||
.I count
|
||||
is given, only the first
|
||||
.I count
|
||||
frames are printed.
|
||||
.TP
|
||||
.B a
|
||||
Attach to the running process whose pid
|
||||
is contained in
|
||||
.IR address .
|
||||
.TP
|
||||
.B e
|
||||
The names and values of all
|
||||
external variables are printed.
|
||||
.TP
|
||||
.B w
|
||||
Set the page width for output to
|
||||
.I address
|
||||
(default 80).
|
||||
.TP
|
||||
.B q
|
||||
Exit from
|
||||
.IR db .
|
||||
.TP
|
||||
.B m
|
||||
Print the address maps.
|
||||
.TP
|
||||
.B k
|
||||
Simulate kernel memory management.
|
||||
.TP
|
||||
.BI M machine
|
||||
Set the
|
||||
.I machine
|
||||
type used for disassembling instructions.
|
||||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.BI : modifier
|
||||
Manage a subprocess.
|
||||
Available modifiers are:
|
||||
.RS
|
||||
.TP
|
||||
.PD 0
|
||||
.BI h
|
||||
Halt
|
||||
an asynchronously running process to allow breakpointing.
|
||||
Unnecessary for processes created under
|
||||
.IR db ,
|
||||
e.g. by
|
||||
.BR :r .
|
||||
.TP
|
||||
.BI b c
|
||||
Set breakpoint at
|
||||
.IR address .
|
||||
The breakpoint is executed
|
||||
.IR count \-1
|
||||
times before
|
||||
causing a stop.
|
||||
Also, if a command
|
||||
.I c
|
||||
is given it is executed at each
|
||||
breakpoint and if it sets dot to zero
|
||||
the breakpoint causes a stop.
|
||||
.TP
|
||||
.B d
|
||||
Delete breakpoint at
|
||||
.IR address .
|
||||
.TP
|
||||
.B r
|
||||
Run
|
||||
.I textfile
|
||||
as a subprocess.
|
||||
If
|
||||
.I address
|
||||
is given the
|
||||
program is entered at that point; otherwise
|
||||
the standard entry point is used.
|
||||
.I Count
|
||||
specifies how many breakpoints are to be
|
||||
ignored before stopping.
|
||||
Arguments to the subprocess may be supplied on the
|
||||
same line as the command.
|
||||
An argument starting with < or > causes the standard
|
||||
input or output to be established for the command.
|
||||
.TP
|
||||
.BI c s
|
||||
The subprocess is continued.
|
||||
If
|
||||
.I s
|
||||
is omitted
|
||||
or nonzero,
|
||||
the subprocess
|
||||
is sent the note that caused it to stop.
|
||||
If 0
|
||||
is specified,
|
||||
no note is sent.
|
||||
(If the stop was due to a breakpoint or single-step,
|
||||
the corresponding note is elided before continuing.)
|
||||
Breakpoint skipping is the same
|
||||
as for
|
||||
.BR r .
|
||||
.TP
|
||||
.BI s s
|
||||
As for
|
||||
.B c
|
||||
except that
|
||||
the subprocess is single stepped for
|
||||
.I count
|
||||
machine instructions.
|
||||
If a note is pending,
|
||||
it is received
|
||||
before the first instruction is executed.
|
||||
If there is no current subprocess then
|
||||
.I textfile
|
||||
is run
|
||||
as a subprocess as for
|
||||
.BR r .
|
||||
In this case no note can be sent; the remainder of the line
|
||||
is treated as arguments to the subprocess.
|
||||
.TP
|
||||
.BI S s
|
||||
Identical to
|
||||
.B s
|
||||
except the subprocess is single stepped for
|
||||
.I count
|
||||
lines of C source. In optimized code, the correspondence
|
||||
between C source and the machine instructions is
|
||||
approximate at best.
|
||||
.TP
|
||||
.BI x
|
||||
The current subprocess, if any, is released by
|
||||
.I db
|
||||
and allowed to continue executing normally.
|
||||
.TP
|
||||
.B k
|
||||
The current subprocess, if any, is terminated.
|
||||
.TP
|
||||
.BI n c
|
||||
Display the pending notes for the process.
|
||||
If
|
||||
.I c
|
||||
is specified, first delete
|
||||
.I c'th
|
||||
pending note.
|
||||
.PD
|
||||
.RE
|
||||
.SS Addresses
|
||||
The location in a file or memory image associated with
|
||||
an address is calculated from a map
|
||||
associated with the file.
|
||||
Each map contains one or more quadruples
|
||||
.RI ( "t, f, b, e, o" ),
|
||||
defining a segment named
|
||||
.I t
|
||||
(usually,
|
||||
.IR text ,
|
||||
.IR data ,
|
||||
or
|
||||
.IR core )
|
||||
in file
|
||||
.I f
|
||||
mapping addresses in the range
|
||||
.I b
|
||||
through
|
||||
.IR e
|
||||
to the part of the file
|
||||
beginning at
|
||||
offset
|
||||
.IR o .
|
||||
If segments overlap, later segments obscure earlier ones.
|
||||
An address
|
||||
.I a
|
||||
is translated
|
||||
to a file address
|
||||
by finding the last segment in the list
|
||||
for which
|
||||
.IR b ≤ a < e ;
|
||||
the location in the file
|
||||
is then
|
||||
.IR address + f \- b .
|
||||
.PP
|
||||
Usually,
|
||||
the text and initialized data of a program
|
||||
are mapped by segments called
|
||||
.IR text ,
|
||||
.IR data ,
|
||||
and
|
||||
.IR bss .
|
||||
Since a program file does not contain stack data,
|
||||
this data is
|
||||
not mapped.
|
||||
The text segment is mapped similarly in
|
||||
a normal (i.e., non-kernel)
|
||||
.IR memfile .
|
||||
However, one or more segments called
|
||||
.I data
|
||||
provide access to process memory.
|
||||
This region contains the program's static data, the bss, the
|
||||
heap and the stack.
|
||||
.PP
|
||||
Sometimes it is useful to define a map with a single segment
|
||||
mapping the region from 0 to 0xFFFFFFFF; a map of this type
|
||||
allows an entire file to be examined
|
||||
without address translation.
|
||||
.PP
|
||||
The
|
||||
.B $m
|
||||
command dumps the currently active maps. The
|
||||
.B ?m
|
||||
and
|
||||
.B /m
|
||||
commands modify the segment parameters in the
|
||||
.I textfile
|
||||
and
|
||||
.I memfile
|
||||
maps, respectively.
|
||||
.SH EXAMPLES
|
||||
To set a breakpoint at the beginning of
|
||||
.B write()
|
||||
in extant process 27:
|
||||
.IP
|
||||
.de EX
|
||||
.RS
|
||||
.ft B
|
||||
.nf
|
||||
..
|
||||
.de EE
|
||||
.RE
|
||||
..
|
||||
.EX
|
||||
% db 27
|
||||
:h
|
||||
write:b
|
||||
:c
|
||||
.EE
|
||||
.PP
|
||||
To set a breakpoint at the entry of function
|
||||
.B parse
|
||||
when the local variable
|
||||
.B argc
|
||||
in
|
||||
.B main
|
||||
is equal to 1:
|
||||
.IP
|
||||
.EX
|
||||
parse:b *main.argc-1=X
|
||||
.EE
|
||||
.PP
|
||||
This prints the value of
|
||||
.B argc-1
|
||||
which as a side effect sets dot; when
|
||||
.B argc
|
||||
is one the breakpoint will fire.
|
||||
Beware that local variables may be stored in registers; see the
|
||||
BUGS section.
|
||||
.SH "SEE ALSO"
|
||||
.IR 9nm (1),
|
||||
.IR acid (1)
|
||||
.SH SOURCE
|
||||
.B /sys/src/cmd/db
|
||||
.SH DIAGNOSTICS
|
||||
Exit status is 0, unless the last command failed or
|
||||
returned non-zero status.
|
||||
.SH BUGS
|
||||
Examining a local variable with
|
||||
.I routine.name
|
||||
returns the contents of the memory allocated for the variable, but
|
||||
with optimization, variables often reside in registers.
|
||||
Also, on some architectures, the first argument is always
|
||||
passed in a register.
|
||||
.PP
|
||||
Variables and parameters that have been
|
||||
optimized away do not appear in the
|
||||
symbol table, returning the error
|
||||
.IR "bad local variable"
|
||||
when accessed by
|
||||
.IR db .
|
||||
.PP
|
||||
Breakpoints should not be set on instructions scheduled
|
||||
in delay slots. When a program stops on such a breakpoint,
|
||||
it is usually impossible to continue its execution.
|
Loading…
Reference in a new issue