首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >COBOL中的CICS程序栈

COBOL中的CICS程序栈
EN

Stack Overflow用户
提问于 2015-05-08 09:38:19
回答 3查看 541关注 0票数 0

是否有方法识别调用堆栈中的程序名?也就是说,我有一个PGM X连接到一个PGM B,这个链接到一个PGM C,然后,在C中,我想知道是哪个程序发起了调用(PGM X)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-28 15:00:33

如果您在CICS中,可以使用程序选项执行EXEC CICS分配并获取当前程序的名称,以及与INVOKINGPROG链接到该程序的程序。这将给你程序C和程序B在这种情况下。

要获得最初的最高级别的课程是比较困难的。您可以查询当前事务(EIBTRNID)来获取运行的程序,但是如果您已经被路由到某个地方,那么就不是program,而是DFHMIRS。

票数 1
EN

Stack Overflow用户

发布于 2015-05-08 19:49:38

你可以这样做,但这需要一个小汇编程序。本质上,您需要追踪保存区域并在返回地址上执行CSVQUERY,这将给出拥有该保存区域的模块的名称。

有一些奇怪之处,您需要注意Cobol运行时模块(以IGZ为前缀)和/或语言环境模块(以CEE为前缀)。当您执行Cobol调用时,它会调用一个运行时模块,然后调用您调用的程序。

此外,这不会识别执行E.C.链接或E.C.XCTL的程序,只有使用OS保存区域约定的Cobol调用。

示例:

代码语言:javascript
运行
复制
CSVQUERY SEARCH=JPALPA,INADDR=<R14_from_savearea>,OUTEPNM=<module_name_output>,MF=(E,PLIST)

对保存区域链上的每个返回地址重复这样做,您将知道所有调用者。

票数 1
EN

Stack Overflow用户

发布于 2015-05-08 11:29:27

没有得到支持的方法来做到这一点。有些人试图追逐保存区域并遍历可执行代码来确定其名称,但我怀疑所有这些都以眼泪结束。

一个问题是,您无法保证链接或XCTL是如何实现的。在动态调用的情况下,您可能能够跟踪保存区域链,但是您需要弄清楚如何识别模块。你不太可能在COBOL中做任何事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30120578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档