System Dump Analyzer — VMS 5.4
Additional information available:
ATTACHCOPYDEFINEEVALUATEEXAMINEEXITFORMAT
HELPREADREPEATSEARCHSETSHOWSPAWN
VALIDATE
CPU ContextExecute CommandExpressionsInitializationOperation
Process ContextSymbols
CPU Context
In a uniprocessor system there exists only one CPU, and the concept
of SDA CPU context is not an issue. However, for a multiprocessor
system with more than one active CPU, SDA must maintain an idea of
CPU context to provide a way of displaying information bound to a
specific CPU, such as the reason for the BUGCHECK exception, the
currently executing process, the current IPL, the contents of CPU
registers, the interrupt stack pointer (ISP), and any owned spinlocks.
When SDA is first invoked to analyze a crash dump, the "SDA current
CPU" is the CPU that induced the system failure.
The CPU context will be changed as a result of several different SDA
commands. When the CPU context is changed, the "SDA current process"
is changed to the current process on the "SDA current CPU" in order
to keep CPU context and process context in synch. If there is no
current process on the "SDA current CPU", the "SDA current process"
is undefined, and no process context information will be available
until SDA process context is set to a specific process.
Type HELP PROCESS_CONTEXT for specific information about
the "SDA current process".
The following SDA commands will change the "SDA current CPU":
SET CPU cpu_id ! Changes the "SDA current CPU" to CPU cpu_id
SHOW CPU cpu_id ! Changes the "SDA current CPU" to CPU cpu_id
SHOW CRASH ! Changes the "SDA current CPU" to the CPU
! that induced the system failure
If a process is selected that is the current process on a CPU, the
following commands will change the "SDA current CPU" to that CPU:
SET PROCESS process_name
SET PROCESS /INDEX=n
SHOW PROCESS process_name
SHOW PROCESS /INDEX=n
No other SDA commands will affect the "SDA current CPU".
Note: When analyzing the running system, the SET CPU and SHOW CPU
commands are not allowed, since SDA does not have access to
all the CPU-specific information on the running system.
Execute Command
@file-spec
Causes SDA to execute SDA commands contained in a file. Use this
command to execute a set of frequently used SDA commands. This
command is bound to the at sign (@) character. The name of the
file is a required argument.
Expressions
Some SDA commands allow expressions as command parameters.
To create expressions, you can use
Radix operators
Arithmetic and logical operators
Precedence operators
Symbols
Numerals
Radix operators specify a given radix for the number that follows
the operator. SDA displays hexadecimal numbers with leading zeros
and displays decimal numbers with leading spaces.
^X Hexadecimal (default)
^O Octal
^D Decimal
Unary operators
# Logical NOT of value
+ Assigns positive value (default)
- Assigns negative value
@ Uses contents of location
G Adds ^X80000000 to value (system space)
H Adds ^X7FFE0000 to value (control region)
Binary operators
+ Addition
- Subtraction
& Logical AND
! Logical OR
\ Logical XOR
* Multiplication
/ Division
@ Arithmetic shift
Logical AND, logical OR, logical XOR, multiplication, division, and
arithmetic shifting are performed before addition and subtraction.
Precedence operators
Parentheses control the evaluation of all operations. Expressions
enclosed in parentheses are evaluated first. SDA evaluates nested
parenthetical expressions from the innermost to the outermost pairs
of parentheses.
Symbols
Symbols are composed of up to 31 letters and numbers, and
can include the dollar sign and underscore characters. When you
invoke SDA, it copies the global symbols from SYS.STB, the system's
symbol table. You can add other symbols to SDA's symbol table by
using the DEFINE and READ commands. SDA also predefines certain
symbols, some of which follow:
. Current location
G ^X80000000 (system space)
H ^X7FFE0000 (control region)
R0-R11 General registers
AP Argument pointer
FP Frame pointer
SP Stack pointer
PC Program counter
PSL Processor status longword
For a complete list of SDA predefined symbols, type HELP SYMBOLS
Initialization
When you invoke SDA, by using the DCL commands ANALYZE/SYSTEM or
ANALYZE/CRASH, SDA will first execute commands from an initialization
file if one exists, before prompting the user for commands. The
initialization file is commonly used to read in symbol tables and
define keys for SDA commands.
First, SDA searches for an initialization file using the logical name
SDA$INIT. If this file is not found, then SDA searches for the file
SYS$LOGIN:SDA.INIT. If no initialization file is found, or after the
initialization file SDA commands have been executed, SDA starts
accepting interactive user commands from the "SDA>" prompt.
Operation
You execute the System Dump Analyzer program by means of commands.
SDA reads these commands from SYS$INPUT, which can be your terminal
or a command file. You can send the output to a file or to your
terminal.
Any of the following commands will invoke SDA:
$ ANALYZE/CRASH_DUMP dump_file
$ ANALYZE/SYSTEM
$ RUN SYS$SYSTEM:SDA
When a fatal BUGCHECK error causes the system to crash, the system
writes the current state of the hardware registers and all physical
memory to a contiguous file called SYSDUMP.DMP in the SYSEXE account
on the system disk. Alternatively, the system's paging file may be
specified as the destination of the dump information instead of
SYSDUMP.DMP. This is useful on systems that have constrained disk space.
Note that pages currently in the paging file (paged out) are not saved
because the paging file is too large. Although these pages are lost
from the crash dump, the effect on debugging will be minimal because
most pages relating to the crash are still in physical memory when
the crash occurs, and are thus saved in the dump file. Of course, if
the paging file is used as a dump file, the pages that are there are
wiped out.
It is recommended that the system manager set up the system-startup file
so that SDA is always run during system startup. When executed at this
time, SDA first checks to see if the system has just crashed. If so,
SDA executes the SDA commands in the system's startup-command file.
If the system has not just crashed, SDA exits.
The following example shows the SDA commands typically included in the
system's startup file. The most important of these is the COPY
command, which copies the dump file to another file. This operation
is recommended because the system always overwrites this file in the event
of a crash, and the record of the previous crash is lost unless another
copy exists. Furthermore, if the paging file was used as the dump file,
the pages that contain the dump information are not available for paging
until they are explicitly released by the COPY command.
$ !
$ ! Invoke the System Dump Analyzer if the system just crashed
$ !
$ ANALYZE/CRASH_DUMP SYS$SYSTEM:SYSDUMP
SET OUTPUT LPA0:SYSDUMP.LIS ! Make listing file
SHOW CRASH ! Display crash information
SHOW STACK ! Show current operating stack
SHOW SUMMARY ! List all active processes
SHOW PROCESS/PCB/PHD/REGISTERS ! Display current process
SHOW SYMBOLS/ALL ! Print the system symbol table
COPY SYS$SYSTEM:SAVEDUMP.DMP ! Save dump file for later
EXIT
If you need more information on the crash, you can execute SDA
interactively or add SDA commands to the startup file.
Process Context
In a uniprocessor system there are two concepts related to SDA process
context -- the process that is current on the CPU, and the process in
whose context process-specific SDA commands will be interpreted.
Either these two processes are the same, or they are not. However,
for a multiprocessor system with more than one active CPU, the notion
of SDA process context changes to provide a way of displaying
information relevant to a specific process both when the process
is current on some processor, and when the process is not.
The SDA process context will be changed as a result of several
different SDA commands. When the "SDA current process" is changed to
the current process on some CPU, the "SDA current CPU" is changed to
that CPU in order to keep CPU context and process context in synch.
When the "SDA current process" is changed to a process which is not
current on any processor, the "SDA current CPU" is not changed. When
the SDA CPU context is changed to a CPU which has no current process,
the "SDA current process" is undefined, and no process context
information will be available until SDA process context is set to a
specific process. Type HELP CPU_CONTEXT for specific information
about the "SDA current CPU".
The following SDA commands will change the "SDA current process":
SET PROCESS process_name ! Changes the "SDA current process"
! to process_name
SET PROCESS /INDEX=n ! Changes the "SDA current process"
! to the process with index n
SHOW PROCESS process_name ! Changes the "SDA current process"
! to process_name
SHOW PROCESS /INDEX=n ! Changes the "SDA current process"
! to the process with index n
The following commands will change the SDA process context if the
"SDA current process" is not the current process on the selected CPU:
SET CPU cpu_id ! Changes the "SDA current process" to the
! current process on CPU cpu_id
SHOW CPU cpu_id ! Changes the "SDA current process" to the
! current process on CPU cpu_id
SHOW CRASH ! Changes the "SDA current process" to the
! current process on the CPU that induced
! the system failure
No other SDA commands will affect the "SDA current process".
Note: When analyzing the running system, CPU context is not used
because all the CPU-specific information may not be available.
Symbols
Symbols are composed of up to 31 letters and numbers, and
can include the dollar sign ($) and underscore (_) characters. When
you invoke SDA, it reads in the global symbols from SYS.STB, the system's
symbol table, and from REQSYSDEF.STB, a required subset of the symbols
in the file SYSDEF.STB. You can add other symbols to SDA's symbol table
by using the DEFINE and READ commands. SDA also predefines the following
list of symbols which can be used in expressions:
. Current location
G ^X80000000 (system space)
H ^X7FFE0000 (control region)
R0-R11 General registers
AP Argument pointer
FP Frame pointer
SP Stack pointer
PC Program counter
PSL Processor status longword
KSP Kernel stack pointer
ESP Executive stack pointer
SSP Supervisor stack pointer
USP User stack pointer
P0BR P0 Base Register
P0LR P0 Length Register
P1BR P1 Base Register
P1LR P1 Length Register