大型机 CEE3DD 异常终止 - CEE3501S - 在 COBOL 动态调用中找不到模块
Posted
技术标签:
【中文标题】大型机 CEE3DD 异常终止 - CEE3501S - 在 COBOL 动态调用中找不到模块【英文标题】:Mainframe CEE3DD abend - CEE3501S - Module not found in COBOL Dynamic Call 【发布时间】:2018-07-18 03:55:13 【问题描述】:我最近在处理 CICS 事务时遇到了一个问题。我的 CICS 事务正在调用动态链接的 COBOL 模块链。在 PGM-A 负载被新复制到区域后,事务第一次运行良好。当我第二次尝试处理事务时,我不断收到 CEE3DD 异常结束,说找不到从 PGM-A 调用的 PGM-B 的模块。如果我在 CICS 中为 PGM-A 做一个新的副本,事务再次运行良好。
CICS 设置或内存有问题,但我无法弄清楚。 PGM-A 在批处理中运行良好。 PGM-B 从除 PGM-A 之外的任何其他 PGM 调用时都没有问题。 有人可以分享一些关于这可能有什么问题的想法吗?
【问题讨论】:
我建议你参考这个链接bonkersjots.blogspot.com/2018/07/…。请让我们知道正在使用哪些编译器选项以及程序中 CALL 语句的类型。当我尝试将 PGMB 的目标代码与 PGMA 链接而不单独链接编辑 PGMB 时,我得到了 ABEND 3501。 我通过编译和链接编辑 PGMB 解决了异常终止。在你的情况下,我怀疑加载模块丢失了。 如果我执行 newcopy PGM-A,它运行良好。那么,PGM-B 负载怎么会丢失呢?更重要的是,当发出 CALL 命令时,它会显示一些垃圾值而不是 pgm 名称。找不到像加载模块“..@..”这样的东西。我预计至少它会说找不到加载模块“pgm-b”。 【参考方案1】:要通过 CICS 调用您的程序,必须使用 NODYNAM
选项对其进行编译。
诚然,这似乎违反直觉,但使用 DYNAM
选项将导致加载 CICS stubs,而不是加载您的预期程序,并导致 CEE3501S 条件。
因此,使用NODYNAM
选项编译您的程序以避免出现这种错误情况。
查看以下链接了解更多信息:
https://www.ibm.com/support/knowledgecenter/en/SSGMCP_5.3.0/com.ibm.cics.ts.applicationprogramming.doc/topics/dfhp3_cobol_subprog_rules.html
http://www-01.ibm.com/support/docview.wss?uid=swg21054079
【讨论】:
Rich,主要的 CICS-COBOL pgm 是使用 nodynam 选项编译的,但是有大量的处理调用链,并且所有仅 cobol 的模块都是使用 dynam 选项编译的。多年来,这一直运行良好。直到最近这个 pgm 才表现出这样的行为。【参考方案2】:PGM-A 是否使用“CALL VARIABLE”来调用 PGM-B?如果是这样,请在第二次运行时检查 VARIABLE 的内容(该变量的内容可能会在错误消息中报告。该变量的内容可能会被 PGM-A 中的错误覆盖。这可能解释了为什么程序总是失败在(看似)成功运行和新副本之后。
【讨论】:
CALL 'PGM-B' 被使用。这就是为什么我不确定 PGM-B 是如何被淘汰的。【参考方案3】:将其从动态转换为静态有效。但问题仍然是为什么它不适用于动态链接。
【讨论】:
以上是关于大型机 CEE3DD 异常终止 - CEE3501S - 在 COBOL 动态调用中找不到模块的主要内容,如果未能解决你的问题,请参考以下文章