|
HP OpenVMS System Analysis Tools Manual
11.12 Sample System Code Debugging Session
This section provides a sample session that shows the use of some
OpenVMS debugger commands as they apply to SCD. The examples in this
session show how to work with C code that has been linked into the
SYSTEM_DEBUG execlet. It is called as an initialization routine for
SYSTEM_DEBUG.
To reproduce this sample session, the host system needs access to the
SYSTEM_DEBUG.DSF matching the SYSTEM_DEBUG.EXE file on your target
system, and to the source file C_TEST_ROUTINES.C, which is available in
SYS$EXAMPLES. The target system is booted with the boot flags 0, 8004,
so it stops at an initial breakpoint. The system disk is DKB200, and
the network device is ESA0 in the Alpha examples and EIA0 in the
Integrity server examples.
Note that the example displays from Example 11-5 onwards are all taken
from an OpenVMS Integrity server system. On an OpenVMS Alpha system,
some of the output is different, but the commands entered are the same
on both platforms, except in one case, as noted in the accompanying
text.
Example 11-1 Booting an Alpha Target
System |
>>> b -fl 0,8004 dkb200,esa0
INIT-S-CPU...
INIT-S-RESET_TC...
INIT-S-ASIC...
INIT-S-MEM...
INIT-S-NVR...
INIT-S-SCC...
INIT-S-NI...
INIT-S-SCSI...
INIT-S-ISDN...
INIT-S-TC0...
AUDIT_BOOT_STARTS ...
AUDIT_CHECKSUM_GOOD
AUDIT_LOAD_BEGINS
AUDIT_LOAD_DONE
%SYSBOOT-I-GCTFIL, Using a configuration file to boot as a Galaxy instance.
OpenVMS (TM) Alpha Operating System, Version V8.3
© Copyright 1976-2006 Hewlett-Packard Development Company, L.P.
DBGTK: Initialization succeeded. Remote system debugging is now possible.
DBGTK: Waiting at breakpoint for connection from remote host.
|
A sample Integrity server Boot Menu follows (long lines wrapped for
clarity).
Example 11-2 Booting an Integrity server
Target System |
Please select a boot option
EFI Shell [Built-in]
PESOS - X8.2-AHI (Topaz BL2) on $1$DGA3890:[SYS2.]
PESOS - X8.2-AHI (Topaz BL2) on $1$DGA3890:[SYS2.] sysboot
PESOS - E8.2-ADH (Topaz BL1) on $1$DGA3891:[SYS2.]
PESOS - E8.2-ADH (Topaz BL1) on $1$DGA3891:[SYS2.] sysboot
Boot Option Maintenance Menu
System Configuration Menu
Select the "EFI Shell [Built-in]"
Loading.: EFI Shell [Built-in]
EFI Shell version 1.10 [14.61]
Device mapping table
fs0 : Acpi(HWP0002,100)/Pci(1|1)/Scsi(Pun0,Lun0)/HD(Part2,
SigB3A4A931-1F2A-11D8-9EA1-AA000400FEFF)
fs1 : Acpi(HWP0002,100)/Pci(1|1)/Scsi(Pun2,Lun0)/HD(Part1,
SigF7B864C3)
fs2 : Acpi(HWP0002,300)/Pci(1|0)/Fibre(WWN50001FE10011B15D,
Lun2200)/HD(Part1,Sig51C7BEE1-070B-11D9-8099-AA000400FEFF)
fs3 : Acpi(HWP0002,300)/Pci(1|0)/Fibre(WWN50001FE10011B15D,
Lun2200)/HD(Part4,Sig51C7BEE0-070B-11D9-809A-AA000400FEFF)
.
.
.
Shell>
Select the desired device/partion:
Shell> fs1:
fs1:\>
|
Use the utilities in \efi\vms. Use vms_show to list the devices and
vms_set to set ethernet device (debug_dev), if necessary. Note that
this set is sticky so it only needs to be done once. Then load the
operating system with the desired flags. Note that Alpha and Integrity
servers use the same flags with the same meanings.
fs1:\> dir \efi\vms
Directory of: fs1:\efi\vms
09/13/04 10:13a <DIR> 2,048 .
09/13/04 10:13a <DIR> 2,048 ..
09/13/04 10:13a <DIR> 2,048 tools
09/13/04 10:13a 3,101,184 ipb.exe
09/13/04 10:13a <DIR> 2,048 update
09/13/04 10:13a 846,336 vms_loader.efi
09/13/04 10:13a 244,224 vms_bcfg.efi
09/13/04 10:13a 218,112 vms_set.efi
09/13/04 10:13a 215,040 vms_show.efi
5 File(s) 4,624,896 bytes
4 Dir(s)
fs1:\> \efi\vms\vms_show device
VMS: EIA0
EFI: Acpi(000222F0,0)/Pci(3|0)/Mac(00306E39F77B)
VMS: DKB200
EFI: fs1: Acpi(000222F0,100)/Pci(1|1)/Scsi(Pun2,Lun0)
VMS: DKB0
EFI: fs0: Acpi(000222F0,100)/Pci(1|1)/Scsi(Pun0,Lun0)
VMS: EWA0
EFI: Acpi(000222F0,100)/Pci(2|0)/Mac(00306E3977C5)
.
.
.
|
Set the debug_dev to one of the connected ethernet devices:
fs1:\> \efi\vms\vms_set debug_dev eia0
VMS: EIA0 0-30-6E-39-F7-CF
EFI: Acpi(000222F0,0)/Pci(3|0)/Mac(00306E39F7CF)
fs1:\> \efi\vms\vms_show debug_dev
VMS: EIA0 0-30-6E-39-F7-CF
EFI: Acpi(000222F0,0)/Pci(3|0)/Mac(00306E39F7CF)
|
Boot up the OS. In this example, the boot is with the SCD and initial
(early) breakpoint flags, using root 2 (SYS2), that will vary with
system setups:
fs1:\> \efi\vms\vms_loader -flags "2,8004"
HP OpenVMS Industry Standard 64 Operating System, V8.3
© Copyright 1976-2006 Hewlett-Packard Development Company, L.P.
%EIA-I-BOOTDRIVER, Starting auto-negotiation
%EIA-I-BOOTDRIVER, Auto-negotiation selected 100BaseTX FDX
DBGTK: Initialization succeeded. Remote system debugging is now possible.
DBGTK: Waiting at breakpoint for connection from remote host.
|
The example continues by invoking the system code debugger's
character-cell interface on the host system.
Example 11-3 Invoking the Alpha System Code
Debugger |
$ define dbg$decw$display " "
$ debug/keep
OpenVMS Alpha Debug64 Version V8.3-003
DBG>
|
Example 11-4 Invoking the Integrity server
System Code Debugger |
$ define dbg$decw$display " "
$ debug/keep
OpenVMS I64 Debug64 Version V8.3-003
DBG>
|
Use the CONNECT command to connect to the target system. In this
example, the target system's default password is the null string, and
the logical name DBGHK$IMAGE_PATH is used for the image path; so the
command qualifiers /PASSWORD and /IMAGE_PATH are not being used. You
may need to use them.
When you have connected to the target system, the DBG> prompt is
displayed. Enter the SHOW IMAGE command to see what has been loaded.
Because you are reaching a breakpoint early in the boot process, there
are very few images. See Example 11-5. Notice that SYS$BASE_IMAGE has
an asterisk next to it. This is the currently set image, and all
symbols currently loaded in the debugger come from that image.
Example 11-5 Connecting to the Target
System |
DBG> connect %node_name TSTSYS
%DEBUG-I-INIBRK, target system interrupted
DBG> show image
image name set base address end address
ERRORLOG no 0000000000000000 FFFFFFFFFFFFFFFF
EXEC_INIT no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$ACPI no 0000000000000000 FFFFFFFFFFFFFFFF
*SYS$BASE_IMAGE yes 0000000000000000 FFFFFFFFFFFFFFFF
SYS$DKBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$DKBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$DKBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$EGBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$OPDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$PKMBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$PKMBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$PKMBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$PLATFORM_SUPPORT no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$PUBLIC_VECTORS no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$SRBTDRIVER no 0000000000000000 FFFFFFFFFFFFFFFF
SYSTEM_DEBUG no 0000000000000000 FFFFFFFFFFFFFFFF
SYSTEM_PRIMITIVES no 0000000000000000 FFFFFFFFFFFFFFFF
SYSTEM_SYNCHRONIZATION no 0000000000000000 FFFFFFFFFFFFFFFF
total images: 18
DBG>
|
Example 11-6 shows the target system's console display during the
connect sequence. Note that for security reasons, the name of the host
system, the user's name, and process ID are displayed.
Example 11-6 Target System Connection
Display |
DBGTK: Connection attempt from host HSTSYS user GUEST process 2E801C2F
DBGTK: Connection attempt succeeded
|
To set a breakpoint at the first routine in the C_TEST_ROUTINES module
of the SYSTEM_DEBUG.EXE execlet, do the following:
- Load the symbols for the SYSTEM_DEBUG image with the DEBUG SET
IMAGE command.
- Use the SET MODULE command to obtain the symbols for the module.
- Set the language to be C and set a breakpoint at the routine
test_c_code.
The language must be set because C is case sensitive
and test_c_code needs to be specified in lowercase. The language is
normally set to the language of the main image, in this example
SYS$BASE_IMAGE.EXE. Currently that is not C.
Example 11-7 Setting a Breakpoint |
DBG> set image system_debug
%DEBUG-I-DYNLNGSET, setting language IMACRO
DBG> show module
module name symbols language size
AUX_TARGET no C 0
BUFSRV_TARGET no C 0
BUGCHECK_CODES no BLISS 0
C_TEST_ROUTINES no C 0
LIB$$UNWIND_WEAK no BLISS 0
LIB$EF no IMACRO 0
LIB$MALLOC no C 0
LIB$MALLOC_64 no C 0
LINMGR_TARGET no C 0
OBJMGR no C 0
PLUMGR no C 0
POOL no C 0
PROTOMGR_TARGET no C 0
SOCMGR no C 0
SYS$DOINIT yes IMACRO 122526
TMRMGR_TARGET no C 0
total modules: 16
DBG> set module c_test_routines
DBG> show module c_test_routines
module name symbols size
C_TEST_ROUTINES yes 5672
total C modules: 1
DBG> set language c
DBG> show symbol test_c_code*
routine C_TEST_ROUTINES\test_c_code
routine C_TEST_ROUTINES\test_c_code2
routine C_TEST_ROUTINES\test_c_code3
routine C_TEST_ROUTINES\test_c_code4
routine C_TEST_ROUTINES\test_c_code5
DBG> set break test_c_code
|
Now that the breakpoint is set, you can proceed and activate the
breakpoint. When that occurs, the debugger tries to open the source
code for that location in the same place as where the module was
compiled. Because that is not the same place as on your system, you
need to tell the debugger where to find the source code. This is done
with the debugger's SET SOURCE command, which takes a search list as a
parameter so you can make it point to many places.
Example 11-8 Finding the Source Code |
DBG> set source/latest sys$examples,sys$library
DBG> go
break at routine C_TEST_ROUTINES\test_c_code
113: x = c_test_array[0];
|
Now that the debugger has access to the source, you can put the
debugger into screen mode to see exactly where you are and the code
surrounding it.
Example 11-9 Using the Set Mode Screen
Command |
DBG> Set Mode Screen; Set Step Nosource
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
103: *pVar = (*pVar + c_test_array[17]);
104: c_test_array[7] = test_c_code3(10);
105: c_test_array[3] = test;
106: return c_test_array[23];
107: }
108: void test_c_code(void)
109: {
110: int x,y;
111: __int64 x64,y64;
112:
-> 113: x = c_test_array[0];
114: y = c_test_array[1];
115: x64 = c_test_array[2];
116: y64 = c_test_array[3];
117: c_test_array[14] = test_c_code2(x64+y64,x+y,x64+x,&y64);
118: test_c_code4();
119: return;
120: }
- OUT -output-------------------------------------------------------------------
- PROMPT -error-program-prompt--------------------------------------------------
DBG>
|
Now, you want to set another breakpoint inside the test_c_code3
routine. You use the debugger's SCROLL/UP command (8 on the keypad) to
move to that routine and see that line 93 would be a good place to set
the breakpoint. It is at a recursive call. Then you proceed to that
breakpoint with the GO command.
Example 11-10 Using the SCROLL/UP DEBUG
Command |
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
80: void test_c_code4(void)
81: {
82: int i,k;
83: for(k=0;k<1000;k++)
84: {
85: test_c_code5(&i);
86: }
87: return;
88: }
89: int test_c_code3(int subrtnCount)
90: {
91: subrtnCount = subrtnCount - 1;
92: if (subrtnCount != 0)
93: subrtnCount = test_c_code3(subrtnCount);
94: return subrtnCount;
95: }
96: int test_c_code2(__int64 in64,int in32, __int64 test, __int64* pVar)
97: {
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
- OUT -output-------------------------------------------------------------------
- PROMPT -error-program-prompt--------------------------------------------------
DBG> Scroll/Up
DBG> set break %line 93
DBG> go
DBG>
|
When you reach that breakpoint, the source code display is updated to
show where you currently are, which is indicated by an arrow. A message
also appears in the OUT display indicating you reach the breakpoint at
that line.
Example 11-11 Breakpoint Display |
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
82: int i,k;
83: for(k=0;k<1000;k++)
84: {
85: test_c_code5(&i);
86: }
87: return;
88: }
89: int test_c_code3(int subrtnCount)
90: {
91: subrtnCount = subrtnCount - 1;
92: if (subrtnCount != 0)
-> 93: subrtnCount = test_c_code3(subrtnCount);
94: return subrtnCount;
95: }
96: int test_c_code2(__int64 in64,int in32, __int64 test, __int64* pVar)
97: {
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
103: *pVar = (*pVar + c_test_array[17]);
104: c_test_array[7] = test_c_code3(10);
- OUT -output-------------------------------------------------------------------
break at C_TEST_ROUTINES\test_c_code3\%LINE 93
- PROMPT -error-program-prompt--------------------------------------------------
DBG> Scroll/Up
DBG> set break %line 93
DBG> go
DBG>
|
Now you try the debugger's STEP command. The default behavior for STEP
is STEP/OVER, unlike XDELTA and DELTA, which is STEP/INTO, so, normally
you would expect to step to line 94 in the code. However, because you
have a breakpoint inside test_c_code3 that is called at line 93, you
will reach that event first.
Example 11-12 Using the Debug Step
Command |
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
82: int i,k;
83: for(k=0;k<1000;k++)
84: {
85: test_c_code5(&i);
86: }
87: return;
88: }
89: int test_c_code3(int subrtnCount)
90: {
91: subrtnCount = subrtnCount - 1;
92: if (subrtnCount != 0)
-> 93: subrtnCount = test_c_code3(subrtnCount);
94: return subrtnCount;
95: }
96: int test_c_code2(__int64 in64,int in32, __int64 test, __int64* pVar)
97: {
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
103: *pVar = (*pVar + c_test_array[17]);
104: c_test_array[7] = test_c_code3(10);
- OUT -output-------------------------------------------------------------------
break at C_TEST_ROUTINES\test_c_code3\%LINE 93
break at C_TEST_ROUTINES\test_c_code3\%LINE 93
- PROMPT -error-program-prompt--------------------------------------------------
DBG>
DBG> set break %line 93
DBG> go
DBG> Step
DBG>
|
Now, you try a couple of other commands, EXAMINE and SHOW CALLS. The
EXAMINE command allows you to look at all the C variables. Note that
the C_TEST_ROUTINES module is compiled with the /NOOPTIMIZE switch
which allows access to all variables. The SHOW CALLS command shows you
the call sequence from the beginning of the stack. In this case, you
started out in the image EXEC_INIT. (The debugger prefixes all images
other than the main image with SHARE$ so it shows up as
SHARE$EXEC_INIT. The suffix _CODE0 is appended if the executive image
is sliced.)
Example 11-13 Using the Examine and Show
Calls Commands |
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
82: int i,k;
83: for(k=0;k<1000;k++)
84: {
85: test_c_code5(&i);
86: }
87: return;
88: }
89: int test_c_code3(int subrtnCount)
90: {
91: subrtnCount = subrtnCount - 1;
92: if (subrtnCount != 0)
-> 93: subrtnCount = test_c_code3(subrtnCount);
94: return subrtnCount;
95: }
96: int test_c_code2(__int64 in64,int in32, __int64 test, __int64* pVar)
97: {
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
103: *pVar = (*pVar + c_test_array[17]);
104: c_test_array[7] = test_c_code3(10);
- OUT -output-------------------------------------------------------------------
C_TEST_ROUTINES\test_c_code3\subrtnCount: 8
module name routine name line rel PC abs PC
*C_TEST_ROUTINES test_c_code3 93 0000000000000DC0 FFFFFFFF800BAFC0
*C_TEST_ROUTINES test_c_code3 93 0000000000000DE0 FFFFFFFF800BAFE0
*C_TEST_ROUTINES test_c_code2 104 0000000000000F40 FFFFFFFF800BB140
*C_TEST_ROUTINES test_c_code 117 00000000000010B0 FFFFFFFF800BB2B0
XDT$INIT 00000000000015C0 FFFFFFFF880955C0
*SYS$DOINIT EXE$INITIALIZE 1973 0000000000000360 FFFFFFFF88094360
SHARE$EXEC_INIT_CODE0 000000000005C240 FFFFFFFF803BB640
SHARE$EXEC_INIT_CODE0 0000000000057F20 FFFFFFFF803B7320
SHARE$EXEC_INIT_CODE0 0000000000047850 FFFFFFFF803A6C50
SHARE$EXEC_INIT_CODE0 0000000000042E90 FFFFFFFF803A2290
- PROMPT -error-program-prompt--------------------------------------------------
DBG> set break %line 93
DBG> go
DBG> Step
DBG> examine subrtnCount
DBG> show calls
DBG>
|
If you want to proceed because you are done debugging this code, first
cancel all the breakpoints and then enter the GO command. Notice,
however, that you do not keep running but receive a message that you
have stepped to line 94. This happens because the STEP command used
earlier never completed. It was interrupted by the breakpoint on line
93.
Note that the debugger remembers all step events and only removes them
once they have completed.
Example 11-14 Canceling the Breakpoints |
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
83: for(k=0;k<1000;k++)
84: {
85: test_c_code5(&i);
86: }
87: return;
88: }
89: int test_c_code3(int subrtnCount)
90: {
91: subrtnCount = subrtnCount - 1;
92: if (subrtnCount != 0)
93: subrtnCount = test_c_code3(subrtnCount);
-> 94: return subrtnCount;
95: }
96: int test_c_code2(__int64 in64,int in32, __int64 test, __int64* pVar)
97: {
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
103: *pVar = (*pVar + c_test_array[17]);
104: c_test_array[7] = test_c_code3(10);
105: c_test_array[3] = test;
- OUT -output-------------------------------------------------------------------
module name routine name line rel PC abs PC
*C_TEST_ROUTINES test_c_code3 93 0000000000000DC0 FFFFFFFF800BAFC0
*C_TEST_ROUTINES test_c_code3 93 0000000000000DE0 FFFFFFFF800BAFE0
*C_TEST_ROUTINES test_c_code2 104 0000000000000F40 FFFFFFFF800BB140
*C_TEST_ROUTINES test_c_code 117 00000000000010B0 FFFFFFFF800BB2B0
XDT$INIT 00000000000015C0 FFFFFFFF880955C0
*SYS$DOINIT EXE$INITIALIZE 1973 0000000000000360 FFFFFFFF88094360
SHARE$EXEC_INIT_CODE0 000000000005C240 FFFFFFFF803BB640
SHARE$EXEC_INIT_CODE0 0000000000057F20 FFFFFFFF803B7320
SHARE$EXEC_INIT_CODE0 0000000000047850 FFFFFFFF803A6C50
SHARE$EXEC_INIT_CODE0 0000000000042E90 FFFFFFFF803A2290
stepped to C_TEST_ROUTINES\test_c_code3\%LINE 94
- PROMPT -error-program-prompt--------------------------------------------------
DBG> Step
DBG> examine subrtnCount
DBG> show calls
DBG> cancel break/all
DBG> go
DBG>
|
The STEP/RETURN command, a different type of step command, single steps
assembly code until it finds a return instruction. This command is
useful if you want to see the return value for the routine, which is
done here by examining the R0 register on Alpha, or the R8 register on
Integrity servers.
For more information about using other STEP command qualifiers, see the
HP OpenVMS Debugger Manual.
Example 11-15 Using the Step/Return
Command |
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
83: for(k=0;k<1000;k++)
84: {
85: test_c_code5(&i);
86: }
87: return;
88: }
89: int test_c_code3(int subrtnCount)
90: {
91: subrtnCount = subrtnCount - 1;
92: if (subrtnCount != 0)
93: subrtnCount = test_c_code3(subrtnCount);
-> 94: return subrtnCount;
95: }
96: int test_c_code2(__int64 in64,int in32, __int64 test, __int64* pVar)
97: {
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
103: *pVar = (*pVar + c_test_array[17]);
104: c_test_array[7] = test_c_code3(10);
105: c_test_array[3] = test;
- OUT -output-------------------------------------------------------------------
*C_TEST_ROUTINES test_c_code3 93 0000000000000DE0 FFFFFFFF800BAFE0
*C_TEST_ROUTINES test_c_code2 104 0000000000000F40 FFFFFFFF800BB140
*C_TEST_ROUTINES test_c_code 117 00000000000010B0 FFFFFFFF800BB2B0
XDT$INIT 00000000000015C0 FFFFFFFF880955C0
*SYS$DOINIT EXE$INITIALIZE 1973 0000000000000360 FFFFFFFF88094360
SHARE$EXEC_INIT_CODE0 000000000005C240 FFFFFFFF803BB640
SHARE$EXEC_INIT_CODE0 0000000000057F20 FFFFFFFF803B7320
SHARE$EXEC_INIT_CODE0 0000000000047850 FFFFFFFF803A6C50
SHARE$EXEC_INIT_CODE0 0000000000042E90 FFFFFFFF803A2290
stepped to C_TEST_ROUTINES\test_c_code3\%LINE 94
stepped on return from C_TEST_ROUTINES\test_c_code3\%LINE 94 to C_TEST_ROUTINES\test_c_code3\%LINE 94+17
C_TEST_ROUTINES\test_c_code3\%R8: 0
- PROMPT -error-program-prompt--------------------------------------------------
DBG> show calls
DBG> cancel break/all
DBG> go
DBG> step/return
DBG> examine r8
DBG>
|
After you finish the SCD session, enter the GO command to leave this
module. You will encounter another INI$BRK breakpoint at the end of
EXEC_INIT. An error message is displayed indicating there are no source
lines, because debug information on INI$BRK is not available.
Also notice that there is no message in the OUT display for this event.
That is because INI$BRKs are special breakpoints that are handled as
SS$_DEBUG signals. They are a method for the system code to break into
the debugger and there is no real breakpoint in the code.
Enter the SHOW IMAGE command. You will see more images displayed as the
boot path has progressed further.
Finally, enter GO, allowing the target system to boot completely,
because there are no more breakpoints in the boot path. The debugger
will wait for another event to occur.
Example 11-16 Using the Show Image
Command |
- SRC: module C_TEST_ROUTINES -scroll-source------------------------------------
83: for(k=0;k<1000;k++)
84: {
85: test_c_code5(&i);
86: }
87: return;
88: }
89: int test_c_code3(int subrtnCount)
90: {
91: subrtnCount = subrtnCount - 1;
92: if (subrtnCount != 0)
93: subrtnCount = test_c_code3(subrtnCount);
-> 94: return subrtnCount;
95: }
96: int test_c_code2(__int64 in64,int in32, __int64 test, __int64* pVar)
97: {
98: c_test_array[5] = in64;
99: c_test_array[6] = in32;
100: if (c_test_array[9] > 0)
101: *pVar = (*pVar + c_test_array[17]) & c_test_array[9];
102: else
103: *pVar = (*pVar + c_test_array[17]);
104: c_test_array[7] = test_c_code3(10);
105: c_test_array[3] = test;
- OUT -output-------------------------------------------------------------------
SYS$UTC_SERVICES no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$VM no 0000000000000000 FFFFFFFFFFFFFFFF
SYS$XFCACHE_MON no 0000000000000000 FFFFFFFFFFFFFFFF
SYSDEVICE no 0000000000000000 FFFFFFFFFFFFFFFF
SYSGETSYI no 0000000000000000 FFFFFFFFFFFFFFFF
SYSLDR_DYN no 0000000000000000 FFFFFFFFFFFFFFFF
SYSLICENSE no 0000000000000000 FFFFFFFFFFFFFFFF
SYSTEM_DEBUG yes 0000000000000000 FFFFFFFFFFFFFFFF
SYSTEM_PRIMITIVES no 0000000000000000 FFFFFFFFFFFFFFFF
SYSTEM_SYNCHRONIZATION no 0000000000000000 FFFFFFFFFFFFFFFF
total images: 53
- PROMPT -error-program-prompt--------------------------------------------------
DBG> go
%DEBUG-I-INIBRK, target system interrupted
%DEBUG-I-DYNIMGSET, setting image SYS$BASE_IMAGE
%DEBUG-W-SCRNOSRCLIN, No source line for address: FFFFFFFF80000310
DBG> show image
DBG> go
|
|