The
easiest way of locating the last command issued by your application
before the abend is to use the internal trace table. You must have
had internal trace running, and you need to have captured entries
from the EI level-1 and PC level-1 trace points for your task. The
way you can find the last command using trace is described in Last command identification.
If you did not have trace running, you need to rely on values in
registers belonging to your programs, and try to relate these to your
source statements. That might lead you to an EXEC CICS® command,
or to another type of statement in your program. The procedure is
outlined in Last statement identification.
This process for identifying the last command applies to system
dumps, in which it is necessary to identify the abending task. Item 2 is relevant to transaction dumps.
- If the abend was a local AICA, ASRA, ASRB, or ASRD, find the last
entry in the table and work back until you find an entry for trace
point ID AP 1942. If you cannot find AP 1942, then search for any
one of the following: AP 0790, AP 0791, or AP 0792. The trace entry
for AP 1942 is made on entry to APLI’s recovery routine. The entries
for AP 0790, AP 0791, and AP 0792 are made by DFHSRP, the AP domain
recovery routine that deals with program checks, operating system
abends, and runaway task conditions. The task number for your task
is shown in the entry.
If the abend was none of those mentioned
above, find the last entry in the table and work back until you find
an entry for trace point ID AP 00F2 (PCP abend) that references the
abend code. The task number of your task is shown in the entry.
- Now go back until you find the last trace entry showing
your task number that was made from trace point ID AP 00E1. The trace
entry is located in the EXEC interface program, DFHEIP. The data in
the trace entry includes the value of EIBFN, which tells you the specific
command your program issued before the abend. For programming information
about the possible values that EIBFN can take, and their meanings,
see CICS Application Programming Reference
- You might now be able to identify the program that was being run
when the abend occurred, from knowing the structure of the application.
If not, you can identify the program by using the information in the "program
information for the current transaction" section of the dump.
The failing program is the one most recently linked to (the first
program printed in this section). The summary information includes
the name of the program, and its load point, entry point, and length.
- You should by now have found the program containing the last EXEC
command that was issued before the abend. You next need to locate
the EXEC command in that program. If you cannot do it by inspection,
use the techniques described in the next section.
- Locate the CICS31 transaction storage areas of the transaction
dump. These areas are maintained by CICS, and they relate to the transaction
that was running when the abend occurred. You should be able to see the
eye-catcher DFHTACB in at least one of the areas.
This signifies the start of the transaction abend control block, and
it contains the registers and PSW belonging to the program being executed
when the abend occurred. If there is more than one area containing
this eye-catcher, it means that two or more successive abends occurred.
You need to find the first occurrence, because that relates to the
abend that started the sequence.
- Locate the PSW for the program in the TACB, and make a note of
the next sequential instruction address. The PSW for the program is
present if the abend is AICA, ASRA, ASRB or ASRD. Alternatively, obtain
the offset of the abend within the failing program load module from
the TACB. The offset is present if the abend is ASRA, ASRB or ASRD
and is valid if not X'FFFFFFFF'. Note the value of register
14, too.
- Use the "program information for the current transaction"
section of the dump to obtain the name and entry point of the failing
program. Alternatively, obtain the name of the failing program from
the TACB.
- The offset or PSW should point to an instruction in the program.
If it does not, register 14 should show a return address into your
program. Either way, you need to correlate the address with a statement
in the source code for the program.
If the source language is assembler, the instruction where the abend occurred
is apparent from the program storage in the dump. If the source language
is COBOL, PL/I, or C, you need to refer to a compiler output mapping
source statements onto the object code.

[[ Contents Previous Page | Next Page Index ]]