| Previous | Contents | Index | 
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:
| 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 
 
 | 
| Previous | Next | Contents | Index |