User abend 4000 means that your code is "overwriting control information
used by the error handling routines".
1) Enable all program check conditions, esp. SUBSCRIPTRANGE
2) I would have said take a dump, but you've already done that. So yes,
taking a dump-reading course is a good idea.
3) Get hold of the "Problem Determination Guide"; since this is "licensed
material" you probably won't find it on the web.
Given that it's production code, I guess you're talking "old code" that's
just stopped working. If so, I need some details:
1) Where's it running: MVS, TSO, CICS, IMS?
2) Which compiler, etc.
3) What has changed recently: MVS version, LE version, compiler version?
Go back to your Link-Edit JCL and verify it _very_ carefully. Make
absolutely sure you have not included any of the PL/I or LE runtime
libraries on the SYSLIB. If you have, remove and relink. If you're not sure,
paste the link JCL here..
Quote:
> We're getting
> IBM004I PROGRAM TERMINATED, USER CODE = 4000
> AT OFFSET +0000E0
> IN PROCEDURE WITH ENTRY CHECK_FILES
> on one of our programs. It occurs on a read-with-key of the form:
> READ FILE(X) INTO(Y) KEY(Z);
> It is apparently _not_ associated with a KEY condition; the sought
> record exists. We can't be absolutely certain, however, since _no_ ON
> units are entered. It happens after approximately 3,000,000 similar
> operations.
> If it were a large program I could understand why "program management"
> was getting fussy, but it's only 297 lines (including comments).
> And I was always poor-to-atrocious at dump reading. Any suggestions
> other than a dump-reading class? Production is looking to have the
> problem fixed on something of an expedited basis...
> Frank Clarke
> Tampa Area REXX Programmers' Alliance
> REXX Language Assn
> Join us at www.rexxla.org