标识循环
要识别用户程序中的循环,您可以查看事务转储,也可以使用跟踪表。
过程
- 要使用事务转储来标识循环,请执行以下步骤:
- 查找程序状态字 (PSW) ,并查看它是否指向您的程序。如果您有一个紧密的循环,那么很可能是这种情况,它应该会引导您在循环中使用指令。
- 使用格式化转储末尾的模块索引来查找下一个指令的模块名称。如果指令地址不在您的代码中,那么它对定位循环不太有用。 但是,请尝试识别包含指令的模块,因为它可能是在循环中执行 CICS® 请求期间调用的模块。 如果 PSW 地址未包含在其中一个区域中,那么当失控任务计时器到期时,另一个程序可能代表 CICS 执行。注: 该循环可能位于 CICS 或其他产品所拥有的模块中,并且您的程序不对其负责。 如果循环在 CICS 代码中,请联系 IBM® 支持中心。
- 如果 PSW 指向应用程序外部的模块,请从相应寄存器保存区域中寄存器 14 的内容中找到程序中返回点的地址。如果循环不局限于系统代码,那么返回地址将位于循环中。
- 当您在循环中找到某个点时,请处理源代码并尝试查找循环的限制。
- 查找程序状态字 (PSW) ,并查看它是否指向您的程序。
- 要使用跟踪表来标识循环,请执行以下步骤:
- 转至内部跟踪表中的最后一个条目,然后向后工作,直到到达点标识 AP 1942 的条目为止。在事务异常终止 AICA 后输入恢复时,应该已进行跟踪条目。
- 记下任务号,以便您可以检查您读取的任何其他跟踪条目是否与同一异常终止的任务相关。
- 查看 AP 1942 之前的条目。 特别是,查找具有点标识 AP 00E1的跟踪条目。 这些条目应该是在输入循环之前 (对于紧循环) 或在循环本身 (对于不产生循环) 内生成的。 每当程序发出 EXEC CICS 命令时,将在 EXEC 接口程序 (DFHEIP) 的条目上生成点标识为 AP 00E1 的条目,并且在从 EXEC 接口程序退出时再次生成这些条目。 字段 B 为您提供 EIBFN 的值,该值标识发出的特定命令。
- 标识 EIBFN 的值后,请使用 EXEC CICS 命令的功能代码 中的功能代码列表来标识所发出的命令。
- 对于从 DFHEIP 退出时生成的跟踪条目,字段 A 为您提供来自请求的响应代码。 仔细查看任何响应代码-它们可以提供循环的线索。 该程序是否旨在处理来自 DFHEIP 的所有可能的响应? 您看到的响应代码是否可以解释循环?
如果您看到 AP 00E1的跟踪点的重复模式,那么您有一个不产生的循环。 如果可以将重复模式与程序的源代码中的语句相匹配,那么您已确定循环的限制。如果没有看到 AP 00E1的重复跟踪点模式,那么可能存在紧密循环。 AP 00E1 的最后一个条目 (如果有) 应该是在程序进入循环之前的某个点生成的。 通过将跟踪条目与程序的源代码相匹配,您可能能够识别发出请求的程序中的点。
- 转至内部跟踪表中的最后一个条目,然后向后工作,直到到达点标识 AP 1942 的条目为止。