Add SCRIPTING section to describe new DDB scripting facilities.

Update copyright.
This commit is contained in:
Robert Watson 2007-12-26 09:51:37 +00:00
parent a6905d79a4
commit 32e0b903c3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=174917

View File

@ -1,6 +1,7 @@
.\"
.\" Mach Operating System
.\" Copyright (c) 1991,1990 Carnegie Mellon University
.\" Copyright (c) 2007 Robert N. M. Watson
.\" All Rights Reserved.
.\"
.\" Permission to use, copy, modify and distribute this software and its
@ -59,7 +60,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd December 25, 2007
.Dd December 26, 2007
.Dt DDB 4
.Os
.Sh NAME
@ -630,6 +631,15 @@ buffer.
.Dv debug.ddb.capture.data
returns the contents of the buffer as a string to an appropriately privileged
process.
.Pp
.It Ic run
.It Ic script
.It Ic scripts
.It Ic unscript
Run, define, list, and delete scripts.
See the
.Sx SCRIPTING
section for more information on the scripting facility.
.El
.Sh VARIABLES
The debugger accesses registers and variables as
@ -732,6 +742,131 @@ It may be followed by a
.Ql \&:
and modifiers as described above.
.El
.Sh SCRIPTING
.Nm
supports a basic scripting facility to allow automating tasks or responses to
specific events.
Each script consists of a list of DDB commands to be executed sequentially,
and is assigned a unique name.
Certain script names have special meaning, and will be automatically run on
various
.Nm
events if scripts by those names have been defined.
.Pp
The
.Ic script
command may be used to define a script by name.
Scripts consist of a series of
.Nm
commands separated with the
.Ic ;
character.
For example:
.Bd -literal -offset indent
script kdb.enter.panic=bt;show pcpu
script lockinfo=show alllocks;show lockedvnods
.Ed
.Pp
The
.Ic scripts
command lists currently defined scripts.
.Pp
The
.Ic run
command execute a script by name.
For example:
.Bd -literal -offset indent
run lockinfo
.Ed
.Pp
The
.Ic unscript
command may be used to delete a script by name.
For example:
.Bd -literal -offset indent
unscript kdb.enter.panic
.Ed
.Pp
These functions may also be performed from userspace using the
.Xr ddb 8
command.
.Pp
Certain scripts are run automatically, if defined, for specific
.Nm
events.
The follow scripts are run when various events occur:
.Bl -tag -width kdb.enter.powerfail
.It Dv kdb.enter.acpi
The kernel debugger was entered as a result of an
.Xr acpi 4
event.
.It Dv kdb.enter.bootflags
The kernel debugger was entered at boot as a result of the debugger boot
flag being set.
.It Dv kdb.enter.break
The kernel debugger was entered as a result of a serial or console break.
.It Dv kdb.enter.cam
The kernel debugger was entered as a result of a
.Xr CAM 4
event.
.It Dv kdb.enter.mac
The kernel debugger was entered as a result of an assertion failure in the
.Xr mac_test 4
module of the
TrustedBSD MAC Framework.
.It Dv kdb.enter.ndis
The kernel debugger was entered as a result of an
.Xr ndis 4
breakpoint event.
.It Dv kdb.enter.netgraph
The kernel debugger was entered as a result of a
.Xr netgraph 4
event.
.It Dv kdb.enter.panic
.Xr panic 9
was called.
.It Dv kdb.enter.powerfail
The kernel debugger was entered as a result of a powerfail NMI on the sparc64
platform.
.It Dv kdb.enter.powerpc
The kernel debugger was entered as a result of an unimplemented interrupt
type on the powerpc platform.
.It Dv kdb.enter.sysctl
The kernel debugger was entered as a result of the
.Dv debug.kdb.enter
sysctl being set.
.It Dv kdb.enter.trapsig
The kernel debugger was entered as a result of a trapsig event on the sparc64
or sun4v platform.
.It Dv kdb.enter.unionfs
The kernel debugger was entered as a result of an assertion failure in the
union file system.
.It Dv kdb.enter.unknown
The kernel debugger was entered, but no reason has been set.
.It Dv kdb.enter.vfslock
The kernel debugger was entered as a result of a VFS lock violation.
.It Dv kdb.enter.watchdog
The kernel debugger was entered as a result of a watchdog firing.
.It Dv kdb.enter.witness
The kernel debugger was entered as a result of a
.Xr witness 4
violation.
.El
.Pp
In the event that none of these scripts is found,
.Nm
will attempt to execute a default script:
.Bl -tag -width kdb.enter.powerfail
.It Dv kdb.enter.default
The kernel debugger was entered, but a script exactly matching the reason for
entering was not defined.
This can be used as a catch-all to handle cases not specifically of interest;
for example,
.Dv kdb.enter.witness
might be defined to have special handling, and
.Dv kdb.enter.default
might be defined to simply panic and reboot.
.El
.Sh HINTS
On machines with an ISA expansion bus, a simple NMI generation card can be
constructed by connecting a push button between the A01 and B01 (CHCHK# and
@ -745,7 +880,17 @@ diagnose problems.
Other bus' bridge chipsets may be able to generate NMI using bus specific
methods.
.Sh SEE ALSO
.Xr gdb 1
.Xr gdb 1 ,
.Xr acpi 4 ,
.Xr CAM 4 ,
.Xr mac_text 4 ,
.Xr ndis 4 ,
.Xr netgraph 4 ,
.Xr textdump 4 ,
.Xr witness 4 ,
.Xr ddb 8 ,
.Xr sysctl 8 ,
.Xr panic 9
.Sh HISTORY
The
.Nm