|
OpenVMS Delta/XDelta Debugger Manual
- Two breakpoints have already been set and are
displayed. Using ;B, DELTA/XDELTA displays each breakpoint number and
the address location of each breakpoint.
- Breakpoint 2 is cleared.
- Current breakpoints are displayed. Because
breakpoint 2 has been cleared, DELTA/XDELTA displays just breakpoint 1.
- Program execution is continued using the ;P
command.
Displaying Breakpoints in a Multithreaded Application
To support the debugging of multithreaded applications, DELTA has the
capability of displaying a thread ID at a breakpoint. When DELTA
reaches a breakpoint in a multithreaded application, DELTA displays the
thread ID and stops the execution of all other threads. (When DELTA
reaches a breakpoint in a single-threaded application, the display and
behavior is the same as in the past; DELTA displays the address and
stops program execution.)
In the following example, a breakpoint is set in a multithreaded
application with 30000;B and is followed by the ;P (Proceed from
Breakpoint) command. The breakpoint is taken. Because it is a
multithreaded application, the thread ID is included in the display.
30000;B ;P
Brk 1 at 30000 on Thread 12
00030000! LDA SP,#XFF80(SP)
|
;P (Proceed from Breakpoint)
Continue program execution following a breakpoint.
Format
;P
Description
The Proceed from Breakpoint command continues program execution at the
address contained in the PC of the program. Program execution continues
until the next breakpoint or until program completion.
If DELTA/XDELTA does not have write access to the target of a JSR
instruction, you cannot use the S or ;P command at the JSR instruction.
First, you must use the O command; then you can use the S or ;P command.
Example
The following example applies only to OpenVMS VAX.
;B
2 00000699 (1)
;P (2)
2 BRK AT 00000699
00000699/BSBB 000006A2 (3)
|
- Current breakpoints are displayed using ;B
(breakpoint 2 at address 699).
- Program execution is continued using the ;P
command.
- Program execution halts at breakpoint 2.
DELTA/XDELTA displays the breakpoint message (the breakpoint number and
the address) and the instruction.
Example
The following example applies only to OpenVMS Alpha.
;B
1 00030010 (1)
;P (2)
Brk 1 at 00030010
00030010! STQ R26,#X0008(SP) (3)
|
- Current breakpoints are displayed using ;B
(breakpoint 1 at address 30010).
- Program execution is continued using the ;P
command.
- Program execution halts at breakpoint 1.
DELTA/XDELTA displays the breakpoint message (the breakpoint number and
the address) and the instruction.
;G (Go)
Continues program execution.
Format
address-expression ;G
Parameters
address-expression
The address at which to continue program execution.
Description
The Go command places the address you specified in
address-expression into the PC and continues execution
of the program at that address. It is useful when you want to ignore
specific lines of code or return to a previous program location to
repeat execution.
Example
Program execution is started at address 6A2.
S (Step Instruction)
Executes one instruction and displays the next. If the executed
instruction is a call to a subroutine, it steps into the subroutine and
displays the next instruction to be executed in the subroutine.
Format
S
Description
The Step Instruction command executes one instruction and displays the
next instruction (in instruction mode) and its address. Use this
command to single-step instructions, including single-stepping all
instructions in subroutines. If you want to exclude single-stepping
instructions in subroutines, use the O command.
The instruction displayed has not yet been executed. This command sets
a flag to change the display mode to instruction mode. Any subsequent
Close Current Location, Open Next (LINEFEED) commands and Open and
Display Indirect Location (TAB) commands will display locations as
machine instructions. The Open Location and Display Contents (/)
command clears the flag, causing the display mode to revert to
longword, hexadecimal mode.
On VAX, if the instruction being executed is a BSBB, BSBW, JSB, CALLG,
or CALLS instruction, Step moves to the subroutine called by these
instructions and displays the first instruction within the subroutine.
On Alpha, if the instruction being executed is a JSR or BSR
instruction, Step moves to the subroutine called by these instructions
and displays the first instruction within the subroutine.
Note
If DELTA/XDELTA does not have write access to the target of a JSR
instruction, you cannot use the S or ;P command at the JSR instruction.
First, you must use the O command; then you can use the S or ;P
command.
|
On Alpha and VAX, in general, you move to the instruction where you
want to start single-step execution by placing a breakpoint at that
instruction and typing ;P. Then press S to execute the first
instruction and display the next one.
Example
The following example applies only to OpenVMS VAX.
00000690/CMPL R0,#000009A8 S (1)
00000697/BEQL 0000069D S (2)
00000699/BSBB 000006A2 S (3)
000006A2/PUSHL R2 (4)
|
- Step program execution is started at address
690. The instruction at 690 is executed and the next instruction is
displayed. Step execution is continued using S.
- At address 697, there is a branch instruction
to the instruction at address 69D. However, because the condition
(BEQL) is not met, program execution continues at the next instruction.
The next S command is executed.
- At address 699, there is a branch instruction
to the instruction at address 6A2, a subroutine. The next S command is
executed.
- Program execution moves to the subroutine.
Example
The following example applies only to OpenVMS Alpha.
0003003C! BLBC R0,#X000006 S (1)
00030040! LDQ R16,#X0050(R2) S (2)
00030044! BIS R31,R31,R17 S (3)
00030048! LDQ R26,#X0040(R2)
|
- Step program execution is started at address
3003C. The instruction at 3003C is a conditional branch instruction.
Step execution is continued using the S command.
- Because the condition (BLBC) was not met,
program execution continued at the next instruction at address 30040.
Had the branch been taken, execution would have continued at address
30058. The second S command causes the LDQ instruction to be executed.
- The instruction at address 30044 is
displayed. The S command is executed.
O (Step Instruction over Subroutine)
Executes one instruction, steps over a subroutine by executing it, and
displays the instruction to which the subroutine returns control.
Format
O
Description
The Step Instruction over Subroutine command executes one instruction
and displays the address of the next instruction. If the instruction
executed is a call to a subroutine, the subroutine is executed and the
next instruction displayed is the instruction to which the subroutine
returns control. Use this command to do single-step instruction
execution excluding single-stepping of instructions within subroutines.
If you want to do single-step execution of all instructions, including
those in subroutines, use the S command.
This command sets a flag to change the display mode to instruction
mode. Any subsequent Close Current Location, Open Next (LINEFEED)
commands and Open and Display Indirect Location (TAB) commands will
display locations as machine instructions. The Open Location and
Display Contents (/) command clears the flag, causing the display mode
to revert to longword, hexadecimal mode.
On VAX, the subroutine call instructions are BSBB, BSBW, JSB, CALLG,
and CALLS.
On Alpha, the subroutine call instructions are JSR and BSR.
On Alpha and VAX, if you set a breakpoint in the subroutine and enter
the O command, program execution breaks at the subroutine breakpoint.
When you enter a Proceed command (;P), and program execution returns to
the instruction to which the subroutine returns control, a message is
displayed, as follows:
STEPOVER BRK AT nnnnnnnn
instruction
|
The message informs you that program execution has returned from a
subroutine.
If you are using XDELTA in a multiprocessor environment, the CPU ID of
the processor where the break was taken is also displayed.
On VAX, the CPU ID is displayed as a 2-digit hexadecimal number.
On Alpha, the CPU ID is displayed as a decimal number with no leading
zeros.
Example
The following example applies only to OpenVMS VAX.
6D5;B (1)
;P (2)
1 BRK AT 000006D5
000006D5/CALLS #0C,@#7FFEDE00 ;P (3)
PID= 0006 LOGINTIME= 12:50:29.45
2 BRK AT 00000699
00000699/BSBB 000006A2 ;P (4)
1 BRK AT 000006D5
000006D5/CALLS #0C,@#7FFEDE00 ;P (5)
PID= 0007 LOGINTIME= 12:50:37.08
2 BRK AT 00000699
00000699/BSBB 000006A2 O (6)
1 BRK AT 000006D5
000006D5/CALLS #0C,@#7FFEDE00 ;P (7)
PID= 0008 LOGINTIME= 12:50:45.64
STEPOVER BRK AT 0000069B (8)
0000069B/BRB X1+047A
|
- One breakpoint has been set at address 699 in
the main routine. A simple breakpoint is set at 6D5 using ;B. This
breakpoint is in a subroutine.
- Program execution continues using ;P.
- Program execution stops at breakpoint 1,
which is in the subroutine. DELTA/XDELTA displays the breakpoint
message and the instruction at the new breakpoint. Program execution
continues using ;P.
- The subroutine completes and displays some
output. Program execution continues until breakpoint 2. DELTA/XDELTA
displays the breakpoint message and the breakpoint 2 instruction.
Program execution continues with the ;P command.
- Program execution stops at breakpoint 1.
Program execution continues with the ;P command. The subroutine
completes execution and displays the output.
- Program execution stops at breakpoint 2. The
subroutine is stepped over to the next instruction using the O command.
- Program execution stops at breakpoint 1 in
the subroutine. Program execution continues using the ;P command.
- The subroutine completes execution and
displays output. DELTA/XDELTA displays a STEPOVER break message that
states the O command has been completed, returning control at address
69B.
Example
The following example applies only to OpenVMS Alpha.
30040;B (1)
30070;B (2)
;B
1 00030040
2 00030070
;P (3)
Brk 1 at 00030040
00030040! LDA R27,#XFFC8(R2) O (4)
00030044! BSR R26,#X00000A O (5)
Brk 2 at 00030070
00030070! LDA SP,#XFFD0(SP) ;P (6)
Step-over at 30048
00030048! LDQ R26,#X0048(R2) S (7)
0003004C! BIS R31,R31,R17
|
- A simple breakpoint is set in the main
routine at address 30040, just prior to the subroutine call.
- A simple breakpoint is set in the subroutine
at address 30070. The breakpoints are displayed using the ;B command.
- Program execution continues using ;P.
- Program execution stops at breakpoint 1.
DELTA/XDELTA displays the breakpoint message and the instruction at the
breakpoint address. The O command is used to single-step (DELTA/XDELTA
recognizes that this is not a call instruction and turns it into a
single-step instead).
- The next instruction is a subroutine call
(BSR). The subroutine is stepped over using the O command.
- Ordinarily, the step-over would continue
execution at the instruction following the subroutine call. However, in
this case, program execution stops at breakpoint 2 inside the
subroutine at address 30070. Program execution continues with the ;P
command.
- The subroutine completes execution.
DELTA/XDELTA displays a step-over break message that indicates that the
O command has been completed, returning control at address 30048.
' (Deposit ASCII String)
Deposits the ASCII string at the current address.
Format
'string'
Arguments
string
The string of characters to be deposited.
Description
The Deposit ASCII String command deposits string at
the current location (.) in ASCII format. The second apostrophe is
required to terminate the string. All characters typed between the
first and second apostrophes are entered as ASCII character text. Avoid
embedding an apostrophe (') within the string you want to deposit.
When you want to use key commands (LINEFEED, RETURN, ESC, or TAB),
press the key. These commands are entered as text.
This command stores the characters in 8-bit bytes and increments the
current address (.) by one for each character stored.
This command does not change the prevailing display mode.
Example
7FFE1600/'R0/[Linefeed][Linefeed]'
|
The ASCII string "R0/[Linefeed]
[Linefeed]" is stored at address 7FFE1600. This string,
if subsequently executed with the ;E command, examines the contents of
general register 0 (the command R0/), then examines two subsequent
registers (using two LINEFEED commands).
;E (Execute Command String)
Executes a string of DELTA/XDELTA commands stored in memory.
Format
address-expression ;E
Arguments
address-expression
The address of the string of DELTA/XDELTA commands to execute.
Description
The Execute Command String command executes a string of DELTA/XDELTA
commands. Load the ASCII text command string to a specific location in
memory using the Deposit ASCII String command (') or code the string in
your program into an identifiable location.
If you want DELTA/XDELTA to proceed with program execution after it
executes the string of commands, end the command string with the ;P
command. If you want DELTA/XDELTA to wait for you to enter a command
after it executes the string of commands, end the command string with a
null byte (a byte containing 0).
XDELTA, but not DELTA, provides two command strings in memory.
On VAX, the addresses of these command strings are stored in base
registers XE and XF. The string addressed by XE displays the physical
page number (PFN) database for the PFN in X0. The string addressed by
XF copies the PFN in R0 to base register X0. It then displays the PFN
database for that PFN.
On Alpha, the addresses of these command strings are stored in base
registers X14 and X15. The string addressed by X14 displays the
physical page number (PFN) database for the PFN in X0. The string
addressed by X15 copies the PFN in R0 to base register X0. It then
displays the PFN database for that PFN.
On Alpha and VAX, you can use the command strings provided with XDELTA
to obtain the following information:
- Specified PFN
- PFN state and type
- PFN reference count
- PFN backward link or working-set-list index
- PFN forward link or share count
- Page table entry (PTE) address that points to the PFN
- PFN backing-store address
- On VAX, the virtual block number in the process swap image, the
block to which the page's entry in the SWPVBN array points
- On Alpha, the virtual page number in process swap image, the
collection of blocks containing the page as pointed to by the PFN
database
Example
7FFE1600,0;X (1)
7FFE1600 (2)
X0;E (3)
R0/00000001 (4)
R1/00000000
R2/00000000
|
- The address (7FFE1600) where an ASCII string
is stored is placed into base register 0 using ;X.
- DELTA/XDELTA displays the value in X0.
- The command string stored at address
7FFE1600, which is to examine the contents of R0, R1, and R2
(R0/[Linefeed] [Linefeed]), is executed with ;E.
- DELTA/XDELTA executes the commands and
displays the contents of R0, R1, and R2.
;X (Load Base Register)
Places an address in a base register.
Format
address-expression,n[,y];X
Arguments
address-expression
The address to place in the base register.
n
The number of the base register.
y
On Alpha, a parameter for modifying the default offset of
1000016. The valid range is 1 to FFFFFFFF.
Description
On VAX, to place an address in a base register, enter an expression
followed by a comma (,), a number from 0 to F16, a semicolon
(;), and the letter X.
On Alpha, to place an address in a base register, enter an expression
followed by a comma (,), or a number from 0 to 1510,
optionally, a number from 1 to FFFFFFFF, a semicolon (;), and the
letter X.
On Alpha and VAX, DELTA/XDELTA places the address in the base register.
DELTA/XDELTA confirms that the base register is set by displaying the
value deposited in the base register.
For example, the following command places the address 402 in base
register 0. DELTA/XDELTA then displays the value in the base register
to verify it.
402,0;X [Return]
00000402
|
Whenever DELTA/XDELTA displays an address, it will display a relative
address if the address falls within the computer's valid range for an
offset from a base register. The relative address consists of the base
register identifier (Xn), followed by an offset. The offset gives the
address location in relation to the address stored in the base register.
For example, if base register 2 contains 800D046A, the address that
would be displayed is X2+C4, the base register identifier followed by
the offset.
Relative addresses are computed for both opened and displayed locations
and for addresses that are instruction operands.
If you have defined several base registers, the offset will be relative
to the closest base register. If an address falls outside the valid
range, it is displayed as a hexadecimal value.
On VAX, the default offset is 200016 bytes. It cannot be
modified.
On Alpha, the default offset is 1000016, which can be
modified.
Example
The following example applies only to OpenVMS VAX.
00000664/CLRQ -(SP) 200,1;X (1)
00000200 (2)
X1 490!CMPL R0,#000009A8 (3)
X1 499!BSBB X1+04A2 (4)
|
- The base address of the program (determined
from the map file) is virtual address 200. The base address is stored
in base register 1 with ;X.
- DELTA/XDELTA displays the value in base
register 1 just loaded, 200.
- The instruction at offset 490 is displayed in
instruction mode using the ! command. The address reference is X1+490
(the + sign is implied when not specified). DELTA/XDELTA displays the
instruction at address X1+490.
- The instruction at offset 499 is displayed.
This instruction is a branch instruction. DELTA/XDELTA displays the
address of the branch in offset notation.
Example
The following example applies only to OpenVMS Alpha.
30000,0;X (1)
00030000
30070,1,200;X (2)
00030070
;X (3)
0 00030000
1 00030070 00000200
S (4)
X0+00000004! BIS R31,R31,R18
x1+10! STQ FP,#X0020(SP) (5)
|
|