View previous topic :: View next topic
|
Author |
Message |
dipendra Currently Banned New User
Joined: 26 Mar 2007 Posts: 4 Location: chennai
|
|
|
|
hi
i am ahving 1 problem . in any program there are many arithmetical operation and i got SOC7 so how can i know that for which line (or operation) the SOC7 comes. please Expalin me . |
|
Back to top |
|
|
William Thompson
Global Moderator
Joined: 18 Nov 2006 Posts: 3156 Location: Tucson AZ
|
|
|
|
Hi back,
Do you have a current compilelisting for the program? |
|
Back to top |
|
|
mmwife
Super Moderator
Joined: 30 May 2003 Posts: 1592
|
|
|
|
Didn't your sysmsg give you the line#? If you're using an older OS you'll have to use the OFFSET addr in sysmsg.
Here's one way:
If you haven't used LIST as a compiler option, add LIST,NOOFF to the option list. Recompile pgm. Assuming there were no pgm changes since the abend, use the OFFSET by searching for it in the compiler listing:
do a "f MVC" then do a find using the OFFSET addr. This will point you to the assembler instruction that caused the 0C7. Then scan back up the page to find the offending verb. The COBOL stmt# will be shown to the left.
Another:
If you used OFFSET as a compiler option you use a similar approach to that above (no need to recompile). Since OFFSET doesn't list the assem instrs and their addresses you must find the closest COBOL stmt address that is less than (or equal to) the OFFSET addr in your sysmsg. Use the COBOL stmt line# to the left to find the offending COBOL stmt.
The advantage to the 1st approach is that when using COBOL stmts that execute compound arithmetic operations you can find the part of the compound stmt that is causing the problem. But you need basic assembler skills to understand the meaning of the instructions. |
|
Back to top |
|
|
|