Dave's IPCS page :: Tips

"Don't fight a battle if you don't gain anything by winning."
--Field Marshal Erwin Rommel


When I got tired of posing them as questions, I made them tips...

Browse from IPCS output

Instead of using "=1" to browse storage, you can use this Rexx exec on the IPCS output screen via "IP IPCSBR". Once you exit from browse, you are back on your IPCS output without have to reinvoke it. How cool is that!

In either your SYSPROC or SYSEXEC concatenation, create a member with the name of your choosing. I call mine IPCSBR:
/* Rexx - Invoke option 1 of IPCS to browse storage */            
/*                                                                
 | Ensure we are in IPCS                                          
 */                                                               
Address IPCS  /* Talk to IPCS */                                  
'EVALDUMP >= ACTIVE REXX(SOURCE(DumpDataset))' /* Get Dump dsn */ 
if  rc <> 0 then do                                               
    say " You must be in IPCS to use this command "               
    exit 12                                                       
    end                                                           
/*                                                                
 | Invoke IPCS browse function                                    
 */                                                               
address ISPEXEC "SELECT PGM(BLSLDISP) NEWAPPL(BLSL) PASSLIB" 
This works for me currently, your mileage may vary.


Retrieving previous IPCS commands

Unlike the primary ISPF option 6, IPCS's option 6 doesn't have a command history. It doesn't need a special one, you can use the ISPF "RETP" command. Sample output:
    ISPF Retrieve Panel       
                              
Select the command            
to be retrieved               
                 More:     +  
    1.  ip cbf cvt                
    2.  find 878              
    3.  status worksheet      
    4.  qw s878        
    5.  st regs               
    6.  st faildata           
    7.  ip list 0284cad8      
    8.  8 8 I forget what 8 was for             


The secret IPCS menu

Use the undocumented option "2.6I" on the main IPCS menu to get to the "IPCS MVS LEVEL 2 TOOLKIT" panel. These are all unsupported of course.



A few IPCS commands

Description

Command

Format the time of day stamp in the SYSTRACE
IP SYSTRACE TIME(LOCAL)

IP SYSTRACE TIME(GMT)
Set default ASID for IPCS commands:
IP SETD ASID(x'xxxx')
Dump information like storage ranges
IP LISTDUMP SELECT(DUMPED ATTRIBUTES TRANSLATION) DSNAME(my.dump.dataset) 
When you have questions like: Did the dataspace get into the dump? What storage ranges are included in the dump? Note: the LD command in the IPCS dump directory (option 4) also shows this.
Display a system level
Name/Token Pair
IP NAMETOKN 0 NAME((nnnnnnnn))
where nnnnnnnn is the name up to 16 characters or X'hex'
for example: ip nametokn 0 name((dsnlogrec))
Display a Home level
Name/Token Pair
IP NAMETOKN aaaaaaaa STR(ASCB) NAME((nnnnnnnn))
where aaaaaaaa is the ASCB address
nnnnnnnn is the name up to 16 characters or X'hex'
Display a Task level
Name/Token Pair
IP NAMETOKN tttttttt STR(TCB) NAME((nnnnnnnn)) 
where tttttttt is the TCB address
nnnnnnnn is the name up to 16 characters or X'hex'
Which ASIDs were dumped:
IP CBF RTCT
What SDATA options are inclued
in the dump
IP CBF RTCT+9C? STR(SDUMP) VIEW(FLAGS) 
Show Save Area chains
IP EQUATE R13 AREA. STR(REGSAVE)
IP EPTRACE SAVEAREA ORDER(RETURN) DATA(R13)
IP EPTRACE ORDER(RETURN) DATA(R13)




First Thing when opening dump

As mentioned on the FAQ page, if you haven't taken it, try to attend IBM's IPCS class.

Although I did say I wasn't going to mention how to shoot dumps, here are a few tips:

Type of Dump

Tips

ABEND
initiated
Dump



SLIP SET,C=xxx

//SYSMDUMP

SDUMP, IEATDUMP macro from ESTAE

etc
Specify the dump or use IPCS option 1:
IP SETDEF   DATASET('name of dump')
Let's look at the registers and PSW:
IP ST REGS
IP ST FAILDATA


In no particular order:

  • We might want to look at the active RBs:
    IP SUMM FORMAT REGISTERS
    F RTM2WA 
    RFIND
    
    Maybe you were bad in a previous life and are debugging LE code, here's an IBM page on Finding the PSW and GPRs in a Language Environmentš SYSMDUMP

  • Anything of intereset in the Master trace:
    IP VERBX MTRACE
  • Check out the system trace:
    IP SYSTRACE TIME(LOCAL)
    F '*' 19 
    RFIND            (until you get to an ABEND)
    
    If it's a 0C4, it may have occurred in an SVC, look for a SVC entry without a SVCR. Note: Many system ABENDs start off as S0C4s and then perculate as specific ABENDS for example a S102 when using the POST macro against a ECB in unaddressible storage.

  • LOGREC
    IP VERBX LOGDATA
    Software events are only put in LOGREC by having RECORD=YES on ESTAE so not all vendor ABENDS are found here. A lot of the time is mostly IBM events here.

SLIP

IP verbx sumdump
                                                                        
STORAGE TYPE        RANGE START        RANGE END     ASID ATTRIBUTES    
                          02847D70          02847D7F 0073 (COMMON)      
PSA ------------          02734000          02735FFF 0073 (COMMON)      
PCCA -----------          00F5B008          00F5B24F 0073 (COMMON)      
...
SLIP REGS SA ---          0284CAD8          0284CC67 0073 (COMMON)    
F "SLIP REGS" 
IP list 0284CAD8
+00000 0284CAD8.                   070C1000 81476374 |        ....a...|
+00008 0284CAE0. 00000000 00000000 84000000 84878000 |........d...dg..|
+00018 0284CAF0. 00000004 00000072 00000000 00000005 |................|
+00028 0284CB00. 00000000 00000878 00000010 00007E10 |..............=.|
+00038 0284CB10. 07EA836C 00FA9380 8147633C 7FF15008 |..c%..l.a..."1&.|
+00048 0284CB20. 87ED7D76 00000010 00000000 00000000 |g.'.............|

IP LIST SLIPTRAP
00000000 | SLIP SET,C=878,A=SVCD,ML=1,J=JES2 

LIST 0 DOMAIN(SDUMPBUFFER) LENGTH(4096)
LIST 00. DOMAIN(SDUMPBUFFER) LENGTH(X'1000') AREA               
DOMAIN(SDUMPBUFFER) ADDRESS(00.)                                
00000000. E3E8D7C5 00000002 C3D7E440 00000040 |TYPE....CPU ... |
00000010. D9C5C7E2 84000000 84878000 00000004 |REGSd...dg......|
00000020. 00000072 00000000 00000005 00000000 |................|
00000030. 00000878 00000010 00007E10 07EA836C |..........=...c%|
00000040. 00FA9380 8147633C 7FF15008 87ED7D76 |..l.a..."1&.g.'.|
00000050. 00000010 D7E2E640 070C1000 81476374 |....PSW ....a...|

Console Dump

DUMP COMM=(title)

Good luck storming the castle!



If there was no SLIP in place or SDUMP issued by the application, the best you can do is get a console dump. However if it's after the ABEND, there's no SDWA hence no registers at time of ABEND.

If it's high CPU, there's the SYSTRACE.


As promised, you didn't learn how to shoot a dump from the tips above. ;-)


Getting the dump

Here's a few tips on getting a dump that you can shoot in IPCS.

Dump contents Turn all of the dump options on so you have all the information in the SVC dump:
CD SET,SDUMP=(CSA,LPA,LSQA,NUC,PSA,RGN,SQA,SUM,SWA,TRT),ADD
On the SLIP itself, add this to get all of the dataspaces:
,DSPNAME=('jobname'.*)
For example, to get a dump of job PAYROLL1:
SL SET,C=0C4,A=SVCD,J=PAYROLL1,DSPNAME=('PAYROLL1'.*),E
Note that ID= wasn't specified and we'll let the system generated one for us or if you must, issue "D SLIP" first and ensure that one you want isn't already in use.

Here's a few example slips:
SL SET,C=0C4,A=SVCD,J=jobname,E

SL SET,C=Uxxxx,A=SVCD,J=jobname,E

SL SET,C=U0999,A=SVCD,ASIDLST=(0,yyyy),J=jobname,E
Note: 0 means current address space "yyyy" would be another ASID

SLIP SET,EN,A=SVCD,C=0C4,JL=(jobname1,jobname2),
J=jobname,SD=(CSA,LPA,LSQA,PSA,RGN,SQA,SUM,TRT),END

SLIP SET,IF,ENABLE,PVTMOD=(ISFINIT,10144,108AA),  
    JOBNAME=jobname,MATCHLIM=65000,                      
    ACTION=TRACE,TRDATA=(STD,REGS,P.10R?,+50),END  

SLIP SET,SA,RANGE=(addr_start,addr_end),ASIDSA=SA,A=SVCD,END
Slip by MSGID Set the SLIP with one of these commands:
SLIP SET,MSGID=msgid,END  
SLIP SET,MSGID='msgid',END 
If you want to only trigger the SLIP based text in the WTO, here are the registers when the SLIP triggers:
R2 = addr of SLMSG     (Major line of WTO)
R3 = addr of SLMsgText  ""
R4 = addr of SLMsg     (Minor line of WTO) 
R5 = addr of SLMSGText  "" 
For example, to get a SVC dump when jobname that starts with "IBM":
IEF403I IBMUSERX - STARTED - TIME=21.10.30
SL SET,MSGID=IEF403I,DATA=(3R?+8,EQ,C9C2D4),A=SVCD,E  
The last I looked, the MSGID was limited to 10 characters and some ISV software puts out longer messages. This is also a limitation of MPF.
System Trace Max out your trace table! Issue this command at your console to change dynamically and better yet set this in your parmlib for future IPLs:
TRACE ST,999K
Some times it may help to get branching entries in the SYSTRACE. This can be done with these commands:
TRACE ST,BR=ON
-cause dump-
TRACE ST,BR=OFF 
Don't leave BR=ON on except while taking a dump. It goes without saying by having BR=ON, there will be less non-branching data in the SYSTRACE.

IEATDUMP Instead of having to suffer an ABEND to get a machine readable dump or create a SLIP, use the IEATDUMP macro in your application where you want to see data in a dump.
Pre-allocated SYS1.DUMPxx datasets
arent large enough for the dump
The year 1980 called and they want their SYS1.DUMPxx datasets back!

The static SYS1.DUMPxx datasets aren't big enough for the 21 century dump you need to take so switch to dynamic dumps briefly:

  • Set Dynamic on:
     DD ALLOC=ACTIVE
  • Set Dynamic allocation values, either SMS:
    DD ADD,SMS=(DATA=xxxxxxxx,MGMT=xxxxxxxx,STOR=xxxxxxxx)
    DD ADD,SMS=()        /* SMS defaults */ 
    DD ADD,SMS=(STOR=DUMPSTOR)
    
    Or Non-SMS:
    DD ADD,VOL=vvvvv
  • To change the dataset name from SYS1.DUMP.D&YYMMDD..T&HHMMSS..&SYSNAME..S&SEQ. use command:
    DD NAME=name
  • Get dump

  • Go back to static method:
    DD ALLOC=INACTIVE
ESTAE In code you have control over:

  • If still using ESTAE, add SDWALOC31=YES to get more information in the SDWA.
  • Add ESTAE or ESTAEX to your programs so you don't get the dreaded message from "ST FAILDATA":
    IEA24014I FORMATTING TERMINATED - NO SDWA.
    
    To get "IP ST FAILDATA" to work in a dump you are shooting, at the minimum you can put this in your program if you have no ESTAE:
             LOAD  EP=IEFBR14                          
             LR    R2,R0                               
             ESTAE (2),CT,SDWALOC31=YES,MF=(E,PARMLIST)
    
    Why is "ST FAILDATA" so nice? for one thing you get the BEAR: Breaking Event Address Register. The BEAR is a new facility on z9-109 processors and enabled starting with z/OS 1.7 which aids in debugging wild branches.

    The BEAR is a 64-bit register in the CPU that holds the last instruction to cause a break in the sequential execution of the CPU.

    SLIP also has BEAR support (z/OS 1.7 and higher). In this case it's called a BEAR trap. ;-)

    Note: The BEAR is usually given the not-as-cute name of BEA - Breaking Event Address.
Getting all data spaces
for job
 dump comm=(vtam2) 
*xx IEE094D SPECIFY OPERAND(S) FOR DUMP COMMAND
r xx,jobname=net,dspname=('net'.*)




Read the Friendly IBM IPCS manuals cover to cover

  1. Go to the z/OS home page
  2. Click on library
  3. Click on either Book (html) or PDF of the operating system of your choice in the "z/OS elements and features publications" section.
  4. The IPCS manuals are in the MVS bookshelf:
    • SA22-7594-xx - z/OS MVS Interactive Problem Control System (IPCS) Commands
    • SA22-7595-xx - z/OS MVS Interactive Problem Control System (IPCS) Customization
    • SA22-7596-xx - z/OS MVS Interactive Problem Control System (IPCS) User's Guide
    • GA22-7589-xx - z/OS MVS Diagnosis: Tools and Service Aids


CBT Tape

There are various IPCS analysis code on the CBT Tape.



Share conference

There are always IPCS sessions at the Share conference.



Active

You can also use IPCS to browse active storage. Many, but not all, IPCS commands and VERBEXITs work in ACTIVE mode.

IP SETDEF ACTIVE


Talking about our friend the Dump

Lastily, a non-technical tip: Watch your usage of the phrase "The Dump".

One day at my last job, one of the computer operators saw me heading out and shouted down the hall: "I JUST TOOK A DUMP!". I wonder what non-Mainframe people made of that! You might think twice when talking on a cell phone in public about dumps. ;-)



Return to the main IPCS page.


Last Updated: 2009-09-05
This web page is © 2009+ by David Alcock. All Rights Reserved.