This document describes how to find the abending statement in an ADS dialog.
Release: All supported releases.
First, compile the dialog with SYMBOL TABLE: YES and re-produce the abend with task snaps ENABLED (DCMT VARY SNAP TASK ON). This will produce a task snap in the dc-log. At the head of the task snap, go to MOST RECENT USER MODE REGISTERS and find R9.
MOST RECENT USER MODE REGISTERS. R0 R1 R2 R3 R4 R5 R6 R73D795CB8 3D795A10 3D795EFC C152D166 3D79585C 416FEEC8 3D795CAC 3D795EFC R8 R9 R10 R11 R12 R13 R14 R15416FEEC0 3D793F88 3D7957F0 3D795A08 4152D690 3D7964E0 4152D7FA 00165010
R9 points to the OTB. Find the OTB in the task snap, and look at offset x'1C':
3D793F80 3B05A140 00000300 D6E3C25C E3E2E3C4 *... ....OTB*TSTD*3D793F90 E2F0C3F7 40404040 40404040 C5D4D7C4 *S0C7 EMPD*3D793FA0 C5D4D6F1 3D795708 416FEA00 00061708 *EMO1.`...?......*
OTB + x’1C’ points to the VDB. Look at offset x’20’:
3D795700 3B059FE0 00000200 E5C4C25C E3E2E3C4 *..¤\....VDB*TSTD* 3D795710 E2F0C3F7 00000000 00000000 3D7957F0 *S0C7...........0*3D795720 3D79585C 0004FFFF 000004B0 000003B8 *.`.*............*
The value at VDB + x’20’ is the offset of the current CME (command element). In this case, it is x’000004B0’.
Now run an ADSORPTS report for the dialog and look for the CME AT 000004B0:
CME AT 000004B0 CLASS +3(0003) FUNC +21(0015) NEXT ADD SEQ# 000000600 FLAG1 00 FLAG2 00 FLAG3 00 ICMD# 000000005 BODY 000000AC 00050003 003C4000 00240000 00000004 00070000 00240000 000C0004 00070000 0034001C 00180001 00040000 00440000 00240003 00041500 00000000 00300000 00002800
The CME offset value is unique across all processes in the dialog.
Note that the statement is an ADD, SEQ# 00000600 and ICMD# 00000005. The ICMD# is unique only within the process, not across the whole dialog. Scroll backwards to find the current process.
RSE AT 000003B8 NAME TSTDS0C7-RP
The process is TSTDS0C7-RP.
Now go to the source listing section of the ADSORPTS for process TSTDS0C7-RP and find the ADD statement at SEQ# 00000600.
26 00000600 ADD 1 TO WS-NUM4.
This is the statement that was being executed at the time of the abend.
If for some reason it is not possible to force the abend with SYMBOL TABLE: YES, then force it with SYMBOL TABLE: NO and run the ADSORPTS on the dialog in that condition. Again, find the CME and then the ICMD# within that ADSORPTS output.
Then re-compile the dialog with SYMBOL TABLE: YES and re-run the ADSORPTS, and find the same ICMD# in that report. Note that in this case, it is possible that the ICMD# will identify the statement AFTER the one which is abending.
Going through the entire process with SYMBOL TABLE: YES is much more reliable.