Recently, while running a very long CL jobstream, we noticed that the value of a character variable that had been set near the beginning of the program had been changed to blanks somewhere before the end of the jobstream.
The amazing thing was that the variable name did not appear anywhere within the program from the point where its value was first set using a Change Variable (CHGVAR) command until near the end of the jobstream, where an IF test showed that the value had been lost.
Using a technique of inserting temporary Send User Message (SNDUSRMSG) commands to report the value of the variable at different points during the program, we narrowed down the problem to a single CALL statement and determined that a parameter mismatch existed with another variable. This character variable was defined with a length of 10 in the calling program and a length of 14 in the called program.
Changing the length of the variable to 10 in the called program solved our problem. Apparently, when returning to the calling program, the extra four characters were overlaying an area of memory and wiping out the value of an unrelated variable.