首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么会导致CICS事务从CICS分配的内存中写入?

什么会导致CICS事务从CICS分配的内存中写入?
EN

Stack Overflow用户
提问于 2012-01-25 15:19:19
回答 4查看 2.1K关注 0票数 0

我在Cobol程序中使用CICS,我注意到有时数据会从CICS内存中写入。它会导致数据损坏和我的应用程序停止。我不知道它附加在哪里,所以我创建了一个解析器来分析我的Cobol代码,以查找CICS使用的COMMAREA中可能出现的损坏。现在,我检查了以下声明:

代码语言:javascript
复制
EXEC CICS XCTL
EXEC CICS LINK
EXEC CICS RETURN TRANSID

对于每一个,我检查发送长度(在LENGTH参数中声明)是否大于发送的COMMAREA。然后我检查接收程序中的DFHCOMMAREA是否大于发送的COMMAREA (根据这个文档http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=%2Fcom.ibm.cics.ts31.doc%2Fdfhp3%2Fdfhp37t.htm):

接收数据区域不需要与原始通信区域相同的长度;如果只需要访问数据的第一部分,则新的数据区域可以更短。但是,它不能超过正在传递的通信区域的长度。如果是,您的事务可能无意中试图读取已传递区域以外的数据。它还可能覆盖该区域以外的数据,这可能导致CICS abend.

现在,我想知道应该解析哪些其他东西来检测内存过写?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-25 17:58:37

当一个CICS程序开始写满内存时,它不仅会“停止工作”,还可能导致CICS区域崩溃!

如果您确信LENGTH是在LINKs和XCTLs上正确设置的,并且您正在将COMMAREA接收到该大小的链接记录(EIBCALEN),那么您应该没事。

我建议您设置编译器边界检查选项,而不是试图解析COBOL程序。您所遇到的问题很可能与超出工作存储表界限的索引或订阅有关。试图通过静态分析来检测这类编程错误通常不是很有效。

设置边界检查应该检测超出范围的内存引用,向日志发出诊断消息,然后在程序崩溃整个CICS区域之前终止程序。记录的消息应指向发生界外引用的源行。

请查看SSRANGE编译时选项。确保设置了它,并且您的CICS区域使用CHECK(ON)运行了启用LE的程序。

这应该会很快地显示出内存引用。

票数 0
EN

Stack Overflow用户

发布于 2012-01-26 01:25:36

NealB有一个好主意。我建议您还查看STGPROTRENTPGM CICS 系统初始化参数

票数 1
EN

Stack Overflow用户

发布于 2012-02-10 13:14:08

在使用Micro时,可以设置memory_strategy可调性(或CBL_MEM_STRATEGY API),通过允许运行时以各种不同的方式保护内存,从而帮助您分析错误发生的位置。

内存也可以通过"CBL_MEM_VALIDATE“调用进行验证。

另一件事是使用追踪支持..。查找CTF (综合追踪设施)。这将使您了解错误发生时代码的位置。

一些对你有帮助的参考资料;

http://kb.microfocus.com/display/4/kb/article.aspx?aid=31645

http://documentation.microfocus.com/help/index.jsp?topic=%2Fcom.microfocus.eclipse.infocenter.studee60win.sp02ws01%2FHRRTRHRTCF0O.html

http://documentation.microfocus.com/help/index.jsp?topic=%2Fcom.microfocus.eclipse.infocenter.studee60ux.sp02ws01%2FGUID-762085AC-8396-4D71-9CC1-6231551D3AEE.html

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

https://stackoverflow.com/questions/9005110

复制
相关文章

相似问题

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