如果在一个可装载模块中,一个程序被多个程序或者被另一个程序多次调用,而恰巧本程序又在运行时出错了,我们怎么快速锁定其实被谁(父程序)调用的呢?(JAVA中有线程工作栈可以很容易找到,而COBOL或者HLASM就有点犯难了),甚至是更上层的程序;或者如果它被一个程序多次调用,我们怎么确定是在哪次被调用时出了问题?
一般情况下,我们可以加DISPLAY来跟踪,不过这样太费时,很多情况下,我们需要加的地方可能是很多处,很有可能是在多个程序中的多个地方同时加DISPLAY来锁定到底是哪里出了问题,等最后问题解决了,还要逐个删除...
这里有个极其简单的方法,什么都不需要做,只要稍微能读懂点dump即可。
很多时候程序出错我们都可以在S.ST里看到有个SYSPRINT这么一个文件,这里面就包含了程序出错时相当多的有用信息,下面我们来针对上面的问题稍加解读(读者还可参考我的另一篇文章“大型机汇编(mainframe assembler/HLASM)之DUMP解读”)。
一般情况下,我们应该能从里面找到下面两者(红字与蓝字显示)其中之一:
SA 0002BDC0 WD1 000