Space announcement This documentation space provides the same content as before, but the organization of the content has changed. The content is now organized based on logical branches instead of legacy book titles. We hope that the new structure will help you quickly find the content that you need.

Miscellaneous Considerations


 Support for CICS Dynamic LIBRARY Capability

Code Debug CICS supports RDO-installed dynamic LIBRARY resources:

  • Application program and Code Debug CICS demo program load libraries may be defined in any number of LIBRARY resources, in any sequence, or may be concatenated into DFHRPL.
  • The Enterprise Common Components (ECC) load library may be defined in any LIBRARY resource, in any sequence, or may be concatenated into DFHRPL. BMC recommends that the ECC load library be defined in the same place (either LIBRARY resource or DFHRPL) as the Code Debug CICS product load library. The ECC load library may be positioned either before or after the Code Debug CICS product load library.
  • The Code Debug CICS product load library may be defined in any LIBRARY resource, or may be concatenated into DFHRPL. If it is defined in a LIBRARY resource, that LIBRARY resource may be sequenced wherever the installer decides.
  • Load libraries containing Code Debug CICS product user-replaceable modules (URMs) or user-customized exits must be defined in the same place (either LIBRARY resource or DFHRPL) as the Code Debug CICS product load library, and should be positioned before the Code Debug CICS product load library.
  • Code Coverage (if licensed) and Xchange (if licensed) load libraries must be defined in the same place (either LIBRARY resource or DFHRPL) as the Code Debug CICS product load library. If either of those product load libraries are not defined in the same place as the Code Debug CICS product load library, the related product will not initialize properly.
Warning

The CEMT DISCARD LIBRARY command requires that the LIBRARY resource be disabled. In addition, Code Debug CICS must be shut down with the XPOF transaction before using DISABLE or DISCARD for a LIBRARY resource.

 DASD Space Requirements

The following lists the estimated DASD space needed for Code Debug CICS target libraries.

Important

c designates the code for the CICS release and xx designates the CICS release. BMC recommends that space allocations for Code Debug’s SMP/E data sets not be reduced. The supplied allocations provide enough space to receive and apply the FMIDs without forcing SMP/E to perform numerous in-flight compresses. If too many compresses are attempted, SMP/E may abort the current operation. This could leave the installation environment in an unknown, and possibly undesirable, state.

DASD Space Requirements

Component

Data set Name

3390 DASD Cylinders

Each CICS dependent FMID

CPWR.cMXD170.SMXDAAFX a

2

CPWR.cMXD170.SMXDAUTH

2

CPWR.cMXD170.SMXDOxxL

60

CPWR.cMXD170.SMXDPDSE

5

CPWR.cMXD170.SMXDSAMP

8

 a SMXDAAFX has been deprecated and, beginning with FMID UMXD170, is no longer created.

 Code Debug Service Provider

The Code Debug Service Provider is a required component of Code Debug CICS.

Warning

The Code Debug Service Provider address space must be active before initialization of Code Debug CICS.

A single Code Debug Service Provider can be used with multiple CICS regions and different CICS releases. Each release of the Code Debug Service Provider is downward compatible. For example, the Code Debug Service Provider included with Code Debug CICS Release 16.05 supports Code Debug CICS Releases 16.05 and 9.4, but does not support Code Debug CICS Release 17.02.

The Code Debug Service Provider supports the following features:

  • Exploitation of the trap facility to improve performance of breakpoint handling
  • Setting breakpoints in programs residing in protected E(RDSA)
  • Code Debug CICS routing in a CICSPlex dynamic-routing environment
  • Cross-LPAR communication between Code Debug Service Providers to facilitate CICSPlex dynamic routing
  • Debugging in Open Transaction Environment (OTE).

Important

When using the Cross-LPAR communication between Code Debug Service Providers feature, the userID associated with the Service Provider must have a RACF OMVS segment (or its equivalent, if you use a different external security manager).

Detailed descriptions of the various messages issued by the Code Debug Service Provider are provided in the section “Code-Debug-Service-Provider-Messages” the Code Debug CICS Messages and Codes space.

 Code Debug Service Provider Security

The default Subsystem Security Exit (DBUGSSX) is delivered with the load module name DBUGSSXX in SMXDAUTH. Therefore, a Subsystem Security Exit will be used only if you take action. If you need to use a Subsystem Security Exit, you can rename DBUGSSXX to DBUGSSX or create your own customized version. An example SMP/E USERMOD to rename the module is in member SSXXUMOD in SMXDSAMP.

If you are using an external security manager, such as RACF, at your site, you may need to customize the Subsystem Security Exit (DBUGSSX) and/or define access rules to allow a CICS address space to access the Code Debug Service Provider Subsystem. Use the sample JCL provided in SMXDSAMP member DBCSSX as displayed in the following figure to assemble and link-edit DBUGSSX.

Sample DBUGSSX Assembly JCL Member (DBCSSX)

********************************* Top of Data *************************
//*====>INSERT JOBCARD HERE <===JOBCARD
//*********************************************************************
//ASM     EXEC PGM=ASMA90,
//             PARM=('LIST,OBJECT,TERM,LINECOUNT(58)')
//SYSTERM  DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//SYSLIB   DD  DISP=SHR,DSN=SYS1.MACLIB
//         DD  DISP=SHR,DSN=SYS1.MODGEN
//SYSLIN   DD  DISP=(NEW,PASS),DSN=&&OBJLIB,
//             UNIT=SYSDA,SPACE=(CYL,(3,1))
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(3,1)),DISP=(,DELETE)
//SYSUT2   DD  UNIT=SYSDA,SPACE=(CYL,(3,1)),DISP=(,DELETE)
//SYSUT3   DD  UNIT=SYSDA,SPACE=(CYL,(3,1)),DISP=(,DELETE)
//SYSPUNCH DD  DUMMY,DCB=BLKSIZE=80
//SYSIN    DD  DISP=SHR,HERES SOME MORE
//             DSN=CPWR.cMXD170.SMXDSAMP(DBUGSSX)    <-- CHECK DSN
//*********************************************************************
//LINKEDIT EXEC PGM=IEWL,
//             PARM='LIST,XREF,MAP,RENT',
//             COND=((5,LT,ASM))
//SYSPRINT DD  SYSOUT=*
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSLIN   DD  DISP=(OLD,DELETE),DSN=&&OBJLIB,
//             UNIT=SYSDA,VOL=REF=*.ASM.SYSLIN
//         DD  *
ENTRY DBUGSSX
NAME DBUGSSX(R)
//SYSLMOD  DD  DISP=SHR,
//             DSN=CPWR.cMXD170.SMXDAUTH             <-- CHECK DSN
//

During Code Debug Service Provider Subsystem initialization, the optional DBUGSSX exit is fetched from the Code Debug CICS APF authorized library. DBUGSSX is called during address space connect processing to determine whether the requester is authorized to connect to the Code Debug Service Provider Address Space. If DBUGSSX is not available, all CICS address space connections will be granted.

Without any customization, DBUGSSX performs a RACROUTE authorization check for READ access against a model profile data set resource class. The model profile data set is named XPEDITER.SUBSYS.ssid.cccccccc where ssid is the Code Debug Service Provider Subsystem Identifier and cccccccc is the requester address space job or started task name.

Resource Rules

Generic resource rules apply to the DBUGSSX-generated resource names. For the most complete protection, a site can define specific resource rules for each resource name that may be generated, then only grant the desired access to those resources to selected userIDs and groups (address spaces).

Another alternative is for a site to define a resource rule that denies all access by default and is always applied unless some other, more restrictive, rule is applied. The rule would be specified as XPEDITER.SUBSYS.** and defined as having no universal access (UACC=NONE). No userIDs or groups would have READ access to it.

More specific resource rules could then be defined, allowing access on an individual basis. In one possible scenario, a site that has CICS production processing regions with job names of PRODxxxx and test processing regions with job names of TESTxxxx might want to protect its production regions from use of the Code Debug Service Provider Subsystem, while retaining the capability of using it in their test regions. To accomplish this, first the site would define XPEDITER.SUBSYS.** with UACC=NONE and not grant READ access to any userIDs or groups. Then XPEDITER.SUBSYS.*.TEST* would be defined with UACC=NONE, and only selected userIDs and groups (address spaces) would be given the necessary READ access.

With these rules, site security retains complete control over which address spaces are able to use the Code Debug Service Provider Subsystem.

Minimizing CPU Consumption When Using Code Coverage

There are certain CICS, Code Debug CICS, and Code Coverageoptions you can set that may reduce CPU consumption when testing withCode Coverage.

CICS SIT Parameters Affecting CPU Consumption

You can alter the system initialization table (SIT) parameters STGPROT and SYSTR as follows either by modifying the SIT or by using SIT overrides.

STGPROT

When this option is set to YES and your application programs are defined as EXECKEY(USER), substantial CPU time will be spent changing execution key. Setting STGPROT to NO will save CPU.

SYSTR

When this option is set to ON, CICS will trace CICS API calls and internal CICS functions. Setting SYSTR to OFF will save CPU.

Code Debug CICS Global Parameter Affecting CPU Consumption

The UPDATE_INTERNAL_BRANCH_TRACE_TABLE global parameter can be set as described in Methods-of-Specifying-and-Updating-Parameters. This region-wide option can also be changed from any Code Debug CICS debugging session with the SET BTRACE primary command.

UPDATE_INTERNAL_BRANCH_TRACE_TABLE

When this option is set to YES or FULL, Code Debug CICS updates an internal branch trace table to help diagnose any Code Debug CICS issues. Unless Code Debug CICS Customer Solutions has requested that you run with this option set to YES or FULL, it should be set to NO to save CPU.

Important

If UPDATE_INTERNAL_BRANCH_TRACE_TABLE is set to NO and an Code Debug CICSS problem occurs, recreate the problem with UPDATE_INTERNAL_BRANCH_TRACE_TABLE set to YES before gathering documentation for Code Debug CICS Customer Solutions.

Code Coverage Global Parameter Affecting CPU Consumption

The setting of the INCREMENT_VERB_COUNTS global parameter can also affect CPU consumption while testing with Code Debug CICS. For more information on setting this option, see the Code Debug CICS Installation and Configuration space.

INCREMENT_VERB_COUNTS

When this option is set to YES, Code Debug CICS will monitor application programs and increment verb counts as each instruction is executed. This is a very CPU-intensive process. The default is YES.

Set this option to NO when it is not necessary to count each time a verb is executed. When INCREMENT_VERB_COUNTS=NO, Code Debug CICS will count each verb only the first time it is executed. To maximize the potential performance benefit of INCREMENT_VERB_COUNTS=NO, rules for Storage Protection and Program Trace are ignored when INCREMENT_VERB_COUNTS=NO and a Code Coverage test is active.

Important

When Code Coverage global parameter INCREMENT_VERB_COUNTS=NO, the System Flow feature of Code Coveragecannot be used. An error message is displayed if you attempt to activate either System Flow or Both (Code Coverage plus System Flow).

When INCREMENT_VERB_COUNTS is set to NO:

  • Only one Code Coverage test at a time may be active in the CICS region.
  • Each application program you execute is marked as RESIDENT until every verb within it has been executed or the Code Coverage test has been halted. If you encounter a Short on Storage (SOS) situation using INCREMENT_VERB_COUNTS=NO, reduce the number of programs referenced by your Code Coverage test.
  • CPU consumption may actually increase, depending on the structure of your Code Coverage test. When the same code is executed multiple times, INCREMENT_VERB_COUNTS=NO will reduce CPU consumption by a factor related to how many times the code is executed. However, when different code is executed by each transaction and there is very little reuse of the same code, INCREMENT_VERB_COUNTS=NO can cause a noticeable increase in CPU consumption.

Workbench for Eclipse in a CPSM CICSPlex Environment

The following capabilities of BMC’s Workbench for Eclipse, when used with a CPSM CICSPlex environment, effectively support Dynamic Transaction Routing across LPARs:

  • DBUGSOCK and XDPIMIRS use Channel/Containers to communicate. This modernizes the communication and allows cross-LPAR debugging sessions to be established. DBUGSOCK is the Code Debug CICS Socket Handler for the Workbench for Eclipse debugger, and XDPIMIRS is the Code Debug CICS Debugging Interface for the Workbench for Eclipse debugger.
  • The CPSM Dynamic Transaction Routing exit DBUGWRAM supports cross-LPAR debugging sessions. If a workstation starts a Workbench for Eclipse debugging session by connecting to a TOR—and transaction XSOC is defined as dynamically routed—the debugging session (XDPIMIRS) will be started in the LPAR to which XSOC is to be routed. The XSOC transaction, however, will be routed to an existing Code Debug CICS-enabled region within the same LPAR as the TOR. This is due to a restriction of CICS Sockets for MVS that requires the socket to run in the same LPAR as the listener. This also means that for each TOR region, at least one Code Debug CICS AOR region must be defined in the same LPAR as the TOR.
  • The trap routing logic within DBUGWRAM will route the application logic to the correct region where the Code Debug CICS trap is set when <HERE> is specified in the terminal field of the trap.
  • The Code Debug CICS start-of-task exit uses the EXEC CICS INQUIRE ASSOCIATION call to obtain the client IP address associated with the task. This allows the terminal emulator IP address to be identified when a trap/breakpoint is taken. This most commonly occurs in cross-LPAR environments. However, the client IP address will only be filled in if the CICSPlex regions’ cross-LPAR connections utilize IPIC connections. If you use SESSION/CONNECTION definitions for cross-LPAR connections, the client IP address will not be available. BMC suggests you upgrade any cross-LPAR connections to use IPIC connections.

Restrictions

The following restrictions apply when using Workbench for Eclipse in a CPSM CICSPlex Environment:

  • If the affinity of the transaction being routed prevents that transaction from running in the region where DBUGWRAM has determined it should be routed, that transaction will not be eligible for debugging. If you encounter this situation, you may need to end your Workbench for Eclipse debugging session and directly connect to an AOR where the transaction can be executed.
  • If you have cross-LPAR regions that communicate using non-IPIC connections, consider upgrading your connections. Being able to correctly identify the IP Address of the transaction being executed is a key factor in determining when a transaction has been initiated by a terminal emulator running on the same workstation as your debugging session.

Examples of CPSM CICSPLEX Configurations Now Supported

The following examples utilize the simple CICSPlex configuration shown in following figure. In this configuration, the Service Providers XP40, XP01, and XP06 are all TCP/IP connected utilizing Code Debug CICS release 17.02.03 Service Providers. The AOR regions H40AC123, H40AC246, H01AC066, H01AC132, H06AC024, and H06AC093 all have Code Debug CICS release 17.02.03 installed and active. The TOR regions H40AC063, H01AC073, and H06AC053 all have Code Debug CICS release 17.02.03 exit DBUGWRAM installed and active. All regions, both TOR and AOR, are connected to their assigned Service Providers.

It is assumed that the user has set a trap in their debug launch configuration that has <HERE> in the Terminal field and all other fields set to asterisks. When the trap is set, the IP address of the workstation is used for the terminal field in the trap. This means that when the routing exit DBUGWRAM is performing a trap search to determine where to route a transaction, it will compare the IP address of the terminal entering the transaction against the IP address in the trap. Since the terminal emulator IP address matches that of the workstation, DBUGWRAM will route the transaction to the region where the trap was set.

Simple CICSPlex Configuration

Misc00069.jpg

Example 1. Workbench for Eclipse Connecting Directly to an AOR

In the following example, a Workbench for Eclipse user connects directly to AOR H06AC024. Because the connection is to an AOR, the routing exit DBUGWRAM is not involved. This means that XSOC (DBUGSOCK) will run in the AOR and do a local LINK to the Debugging Interface XDPIMIRS. Any breakpoints the user has requested will be set in H06AC024.

Workbench for Eclispe Connecting Directly to an AOR

inset_0.jpg


If the user then logs into any TOR in the CICSPlex from their terminal emulator, the enhanced trap logic in routing exit DBUGWRAM will now route any transactions from that terminal emulator to AOR H06AC024 for execution. The user can now debug the programs in which they have set breakpoints using Workbench for Eclipse at their workstation.

Example 2. Workbench for Eclipse Connecting to a TOR

In this example, a Workbench for Eclipse user connects to TOR H01AC073. Because the connection is to a TOR, the routing exit DBUGWRAM is involved. When DBUGWRAM is invoked, transaction XSOC (used to initiate the debugging session) has already been slated for routing to H40AC246 on LPAR CW40 by the Work Load Manager. DBUGWRAM writes an entry to an internal table indicating that the Debugging Interface XDPIMIRS should run in region H40AC246 and then looks for a region with Code Debug CICS active on the same LPAR (CW01) on which the TOR runs. DBUGWRAM finds that region H01AC132 is available and changes the routing of the XSOC transaction to run in H01AC132 instead of H40AC246. This is necessary since XSOC invokes DBUGSOCK, the Sockets Listener Interface, which must run on the LPAR on which it was invoked. XSOC then starts on H01AC132 and links to XDPIMIRS on H40AC246 to start the debugging session. XDPIMIRS and DBUGSOCK communicate via Channel/Containers, and the actual socket connection is made between the workstation running Workbench for Eclipse and DBUGSOCK on H01AC132. Any breakpoints the user has requested will be set in H40AC246.

Workbench for Eclipse Connecting to a TOR

inset_1.jpg


When the user logs on to any TOR in the CICSPlex from their terminal emulator, the enhanced trap logic in routing exit DBUGWRAM will now route any transactions from that terminal emulator to AOR H40AC246 to execute. The user can now debug the programs in which they have set breakpoints using Workbench for Eclipse at their workstation.

 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*