第5章_CICS应用程序的调试--CICS 技术文档05_第1页
第5章_CICS应用程序的调试--CICS 技术文档05_第2页
第5章_CICS应用程序的调试--CICS 技术文档05_第3页
第5章_CICS应用程序的调试--CICS 技术文档05_第4页
第5章_CICS应用程序的调试--CICS 技术文档05_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CICS 技术文档第五章 CICS应用程序的调试CICS程序编译通过不一定就意味着程序没有问题。编译器只关心源程序和不合乎程序语言的语法要求,如命令的拼写,参数表是否符合要求,变量类型是否匹配等。而对于程序的逻辑是否正确并不关心,对用户的响应、操作更是不予考虑。因此就算程序顺利通过编译,各作业步返回码均为零,这个程序安装运行也有可能不正确,如出现类似1+1不等于2的逻辑错误,对于用户的操作做出预料之外的响应,如程序并没有按程序设计者的要求运行而异常终止(ABEND)。这些错误仅靠编译器语法检查是没办法解决的。因此一般来讲CICS程序需要进行进一步的调试。通过调试纠正编译器无法发现的错误。与批处

2、理系统相比,CICS环境下进行程序调试就比较方便了。CICS安装完后,系统就提供一个专门的事务程序CEDF(CICS Execute Dialog Facility)来进行在线程序调试。在CICS TS 版本中还额外提供一个事务程序CEDX用来对后台运行的在线程序进行调试。5.1 CEDF简介 CEDF本身是个事务。它是CICSS系统提供的调试工具,用来实现对应用程序的在线交互式的调试。CEDF的功能较强,使用CEDF可以大大减少项目开发的时间。CEDF调用 CICS的执行诊断设施EDF(Execution Diagnostic Facility)来交互式地调试命令级的应用程序 不必再编写专门

3、的调试程序来调试过程。CEDF允许在程序初始化时中断程序,也可针对每个CICS命令,在程序结束时中断程序。通过CEDF可决定程序中的CICS命令是否被执行以及修改执行结果等等,能帮助你专注于编写的应用程序的问题。CEDF事务程序提供对在线程序进行交互式调试。它的功能非常强大,跟以前DOS下的DEBUG程序非常类似,接下来将进行详细介绍。使用CEDF之前,要保证已安装了EDF资源定义。 由于本章的内容偏应用较多,所以在各小节中有较多的图表及其说明部分。通过这一章的学习,要求读者会做在线的任务调试;能区分不同的 CEDF显示和不同的功能健命令;了解可以用 ENTER TRACENUM(或 TRAC

4、EID)命令来在程序中建立用户跟踪人口点(这种命令在程序中井没有实际的意义,仅用来供CEDF做调试用);掌握双终端调试方法,在用CEDF做调试时,可用一个终端来操作,也可用两个终端来同时来进行调试。5.2 CICS程序跟踪CEDF的第一个中断点是任务的初始化,此时CICS只对任务进行一些初始化工作,如到PCT中验证TRANSID的合法性,查找事务对应的入口程序,分配任务的TCA,EIB等控制块。此时终端屏幕上显示的主要是当前任务的一些信息:任务的ID,对应的事务的ID,初始的 EIB(EXEC Interface Block)值。每个任务都有一个EIB,任务不结束,EIB资源不释放,EIB信息

5、在整个事物所涉及到的各个事物程序间直接共享,而不需要程序员用参数在事务程序间传递。若我们用COBOL语言嵌入CICS命令来编程,则可以看到由翻译器翻译得到的COBOL输出代码的链接节(LINKAGE SECTION)的第一行即为DFHEIBLK数据顶。LINKAGE SECTION。0l DFHEIBLK。02 EIBTIME PIC S9(7) COMP-3。02 EIBDATE PIC S9(7) COMP-3。02 EIBTRNIDPIC X(4)。02 EIBTASKNPIC S9(7) COMP-3。 图5.1 CEDF启动显示(第一部分) 图5.1中第一个 EIB的数据项 EIBT

6、IME和第二个数据项 EIBDATE给出了任务启动时的系统时间和日期,它们可以被CICS的ASKTIME命令修改,刷新成当前的系统时间和日期。EIBTRNID给出了任务的事务标识符,它是四个字符长。EIBRCODE执行的是返回代码。EIBPOSN指出了光标的位置。图中下部的PF表示功能键命令,即若在键盘上按下相应的功能健,会有相应的命令操作。其中F7 是向前(上)滚屏,F8是向后(下)滚屏。这就是主机上所谓的“七上八下。读者会发现在使用CEDF时,各屏幕显示中一般都是以“七上八下”来定义功能健的。 EIB的值较多,一屏显示不下,显示的各EIB值的下都有一个加号,表示还有一些EIB值没有显示出,

7、可以敲F8键向下翻屏。图5.1的上部中TRANSACTION:PA99说明当前TASK是对应的事务标识符是PA99。相应的与事务对应的入口程序是PROGA99,而TASK:0000074指出CICS给本任务分配的任务编号是00004,与批处理下的作业的作业号一样,在某一时刻任务编号是唯一的。DISPLAY:00说明当前的屏显编号为00,即正在执行的屏幕,如果为负数表示是以前保存下来的屏幕。STATUS:PROGRAM INITIATION表示当前任务所处的状态是程序初始化状态。 敲 F8功能键可以得到图5. 2的显示。图5.2 CEDF启动显示(第二部分) 图5.2中 EIBERR数据项指出是

8、否接收到有关APPC会话的错误,当 EIBERR指出有错误时,EIBERRCD中放收到的错误代码。注意到图5. 2中的功能键命令与图5.1中的功能键命令有所不同,显示的各EIB值的上部有一个加号,表示可以敲F7键向上滚屏。敲F8可得到图5.3的显示。图5.3图5.3中 EIBRESP数据项中放着与发生的 RESP情况相应的数字,比如数字 00表示正常,17表示IO错,40表示溢出等。敲回车键得到下一屏幕显示图5.4。注意这里的回车键指的是3270终端方式定义的回车键也称执行键,通常对应PC键盘上的右CTRL键,当然如果是模拟终端的话,用户可以重新设定到任意键上,比如ENTER键。5.3 在CE

9、DF中修改参数值和返回码 CEDF可以在CICS命令真正执行之前暂停,此时调试人员可以直接修改CICS命令中的一些参数的值。这里说的参数是个什么概念呢?读者可能还记得在前面章节中,我们曾经讲到CICS 命令的格式。比如命令 EXEC CICS SEND FROM(FLDA)LENGTH(5)END-EXEC。其中SEND是命令,FROM是选择项(Option),FLDA就是选项的参数,这个参数在CICS中叫Argument,即选择项FROM的选择项参数。LENGTH是选项,5是LENGTH的选项参数。 图5.4 修参数值 图5.4中,EXECCICSDELETEQTSQUEUE(QUEUEZ)

10、NOHANDLE是将队列QUEUEZ从临时存储区中删除的CICS命令。其中NOHANDLE是可以用在任何命令中的选择项用来指示对由命令执行产生的任何情况或AID不采取行动。图中上方的STATUS:ABOUT TO EXECUTE COMMAND指示准备执行命令,但还没有执行。你可以在执行之前,修改临时存储队列名,即在QUEUE位置将QUEUEZ改为其他的队列名。还可以清掉命令来跳过当前的命令执行,也可以用NOP或NOOP命令替代,跳过当前命令的执行。这在测试应用的特别逻辑流程时较有用。比如,你有一个出错的程序段,段中有CICS ABEND和CICS DUMP命令,你可能只是想知道你的程序流程是

11、否正确,而并不想真正产生ABEND或DUMP,图中OFFSET表示该命令在程序中的偏移量。EIBFN数据项中放着指示最近给出的 CICS命令的代码,比如代码 0402表示最近执行的 CICS命令是 RECEIVE命令,0404表示是 SEND命令,0802表示是 WRITEQ TD命令。敲执行键可得到图5. 5。 图5.5 修改返回码 通过CEDF可以修改命令的响应结果。在调试程序时,有些程序段在正常情况下很难发生的条件下才执行,这样,就可以强行设定条件来调试那些在一般情况下很少执行的程序段。在图5.5中可以修改RESPONSE位置的返回码。图中给出的响应结果是QIDERR,表示找不到指定的队

12、列名,44 是 QIDERR错误对应的 RESP值。STATUS:COMMAND EXECUTION COMPLETE表示任务执行的状态,本命令执行正确结束。下面的图5. 6是执行到SEND MAP命令时的屏显。图5.6中给出的CICS命令SENDMAP是向终端发送屏幕映射。其中MAP(PG99MAP)指出要发送的屏幕映射是PG99MAP。FROM(dataarea)描述了包含要处理的数据的数据区所在内存中的值,MAPSET(PG99SET)定义了要使用的屏幕映射集(MAPSET)名,这个屏幕映射集包含在CICS程序装载库中,它可以用CEDA DEFINE MAPSET命令定义或程序自动安装。

13、若没有这个选择项,则屏幕映射选择项给出的参数,即屏幕映射名被作为屏幕映射集名。每个屏幕映射集中最多有999个屏幕映射。LENGTH选择项指出以半字二进制值方式格式化的数据的长度,TERMINAL指出输出数据被送到引发本事务的终端,FREEKB指出3270键盘在写数据完成以后要释放键盘,否则键盘处于锁定状态,ERASE指定终端屏幕缓冲区旧的内容先被清除,然后再发送MAP。图5.6 翻译器行号图中显示的行号由 CICS翻译器的调试选项产生。行号指出当前CICS命令在编译输出列表中所处的行号,如图5.7所示,它一般不是源程序的行号,因为进行CICS翻译时,会增加很多新行近来,这里显示的行号往往比源程

14、序中的行号大不少。图 5.8 程序编译输出列表中的行号 用户显示界面(USER DISPLAY)在SEND MAP命令之后,立即出现。如果SEND MAP命令送出的是一个要求用户输入信息的屏幕映像,对于伪会话式程序,用户不必输人值,因为这个屏幕映像会在任务结束时再次显示。在其他情况下,要看当前的MAP显示界面,用F6键即可。CICS成功的关键是它以多任务为核心的高效率。CICS并不为系统中每个终端用户都创建和维护一个任务,那将需要处理几千个任务,这是不可能高效完成的。相反,仅当用户从终端发送输人时,CICS才为该用户创建一个任务。CICS为该终端创建一个任务,执行一个程序,处理终端输人,必要时

15、更新文件或数据库,并将输人传回给用户,然后任务就结束了。54 显示任务的工作存储空间有时候我们可能需要以十六进制方式显示选择项参数,这时只需要按F2就可以在十六进制方式和字符方式间切换,如图5.8所示。图5.8 以十六进制方式显示选择项参数图5.8中,以十六进制方式显示了选择项参数,还显示了相应参数的地址,通过地址来着以这一地址开始的存贮器中的内容。注意COMMAREA地址:1A8137C8将在后面用到。按下F5可以访问工作存储空间的内容。得到图5.9的显示。图5.9显示了实际地址和相对地址,并以十六进制格式和字符格式来显示相应存储空间的内容、要注意在中断点处功能键的定义会因所处的画面不同而不

16、同。若已经知道了某个变量的相对地址,或已设了一个易于识别的标记,则可以以此来确定要找的地址的位置,修改相应的存储单元的内容。修改时,可以修改左边十六进制格式的内容,也可以修改右边字符格式的内容,若两种格式同时都改了,则会采用十六进制的修改。按下F2键,可以启动一个显示临时存储队列的事务CEBR,对此第8章会有较详细的说明。按F5键,会启动CICS提供的事务CECI,它允许你不用写程序,直接执行CICS的API命令。 图5.9 显示工作存储空间的内容 图5.10显示指定内存地址的内容 在图5.9中,要显示其他地址的存储空间的内容,在左上方的ADDRESS位置散人地址。当按下ENTER 键时,就会

17、显示以此地址开始的存储空间的内容。图5.10显示所给出的是COMMAREA区的内容,它的地址是我们从上一个十六进制格式的显示中得到的1A8137C8。按下F4键可以得到图5. 11的显示。图5. 11示 EIB的内容55设置断点 在工作存储空间的屏显中,按下 F4 键可以得到 EIB的内容、图5. 11是在存储工作空间显示状态下按F4键后显示的当前的EIB值。 在中断点的显示中,敲F9会显示当前CEDF中断点设置情况。比如在图5.8的显示状态下按下F9健可得到图5. 12显示。图5.12 设定中断点条件 图5. 12显示了中断点的定义.设定中断条件以后,敲F4(停止条件)会继续EDF,但不会显

18、示后面的执行直到中断条件满足。使用F3较方便,但CICS还是在做跟踪,事务是以调试模式运行,所以性能比正常情况要差一些。在显示中若要给出行号,它必须是翻译器的输出的列表的行号,只在用DEBUG操作时方有效。要输人行号,需在规定的位置输人,并且要左对齐。4.6 显示前面跟踪过的命令 使用CEDF调试时,你可能想看看前面执行过的命令,CEDF提供了这样做的方法。 图5. 13 显示前面的命令 按F12键可将当前画面给记录下来,默认是记录所有中断点的画面。可以对这些保存下来的画面翻页,按F10 键向前翻,F11向后翻,最多可以存10个画面。 中断点的显示是自动保存,其他显示只在 F12(REMEMB

19、ER DISPLAY)可用时方能按F12键保存。在图5. 13的右上角的数字前有一个负号,这个负号指出了这一显示是前面记下的显示中的一个。当你看以前的显示时,若想直接回到当前的显示(DISPLAY 00),可按ENTER 键或在DISPLAY位置用00覆盖掉原来的数字。4.6 对伪会话方式事务进行调试 由于伪会话的事务往往反复多次执行,使用CEDF跟踪时就要注意了。下面一系列的显示描述了怎样对伪会话程序进行调试。图5. 14中将要执行的命令:EXEC CICS RETURN TRANSID(PG99) COMMAREA(.) LENGTH(1)说明将要执行RETURN命令, COMMAREA

20、给出了一个通讯区,这个通讯区将被获得控制权的下一个程序使用,TRANSID(PG99)指定接下来哪个事务去执行。LENGTH指出COMMAREA的长度(有多少字节长)。按2次执行键后会停在图5.15画面。 图5. 14 继续伪会话方式 田 5.15 当前任务结束图5.15画面表示一次会话(任务)要结束了,问是否继续EDF调试,默认在REPLY后面输入YES,如果想结束EDF调试就输NO,由于现在是调试伪会话程序,因此必须输YES,敲执行键后会回到用户输入界面,用户输完数据敲执行键或其他功能键后,又会启动TRANSID指定的PG99事务,又产生一个新的任务,从图5.16的任务编号就可以看出,但这

21、个任务依然以EDF调试模式运行,就这样可以对一个伪会话程序反复调试,直到满足要求,在询问是否结束EDF时输入NO就可以退出EDF调试模式了。图 5.16 重新对新的任务进行跟踪4.7 CEDF高级应用² 请求异常终止任务 在使用CEDF调试时,有的情况下你可能觉得不想或不必再继续下面命令的调试,比如你已经找到出错的语句和原因了,这时你可以在CEDF中请求异常终止任务。 要异常结束一个任务,必须请求两次。在中断点按F12键(ABEND USER TASK)来异常结束用户任务,得到提示信息;输人异常终止代码,再次请求异常终止,即再按一次F12键,就可以人为产生一个异常,然后结束调试。如图

22、5.17,第一按F12时出现询问画面,在REPLY后面位置输人异常终止代码 HUST,再按一次 F12键。然后得到图5.18的画面。 图 5.17异常终止询问图5. 18 产生ABEND图5. 18显示了异常终止发生时的 EIB值内容,注意到发生的异常终止是HUST异常,就是在上一步REPLY后输入的内容。按下执行键得到图5. 19的画面。图 5.19 异常任务中止 发生异常终止时,会给出异常终止截取显示和CICS事务异常终止信息。这个信息中包含有异常终止代码。图5.20的屏幕的下方给出了这些信息。这些信息以外的其他的显示是在异常终止之前的用户显示画面。图 5.20 TASK 出现ABEND&

23、#178; 在双终端调试 CEDF可以在双终端模式下使用,也就是说,可以用双终端方式来调试应用程序.在双屏员模式中,用一个终端做EDF跟踪,用另一个终端与调试的事务做输人输出。首先,在EDF结束时,在终端中激CEDF tit,其中h是将要调试的事务用的终端。CEDF给的响应信息要因第二终端(在这里是tit)是否已经有事务在运行而定。如果第二终端空闲,在第一终端上会显示 TERMINAL 0002:EDF MODE ON,当需调试的事务在第二终端开始启动执行,在第一个终端上开始显示程序初始化的信息。也可以用EDF在双屏显模式下监控正在另一台终端上运行的事务。比如,你可能觉得0008终端出现死循环

24、,你可以在另一个终端敲人CEDF 0008。这时显示的信息为:TERMINAL 0008:TRANSACTION RUNNIN: EDF MODE ON,接下来CEDF就能对0008终端上的程序进行跟踪,找出死循环的语句。 图5.21 双终端调试模式在图5.21中,左方的终端是操作终端,进行输入数据等操作,右方的终端是调试终端。在调试终端上敲下 CEDF LA77,则此后在操作终端上的执行的命令都会在调试终端上以EDF调试。要查看终端的终端号可以用 CEOT事务来看。双终端调试只需要知道操作终端的终端号就可以了,不需要知道调试终端的终端号。² 跟踪主语言变量若想在比较长又没有CICS

25、命令的COBOL程序段中,交互式地查看一些COBOL变量的内容,可以通过插入用户跟踪人口点来实现。这个命令是ENTER,必须给的选项只有一个TRACEID(CICSMVS 或 CICSOSVS)或TRACENUM(CICSESA),它是一个半字长的二进制数据。可以在EXEC CICS ENTER命令中写人FROM(dataarea)选项,FROM指定一个8字节的数据区,以使你能在用CEDF跟踪时看到它,这一项是可选的。 下列代码是伸用ENTER的例子。对于CICSMVS or CICSOSVS EXEC CICS ENTER TRACEID(01)FROM(MSG1) END-EXEC EXE

26、C CICS ENTER TRACEID(02)FROM(MSG2) END-EXEC EXEC CICS ENTER TRACEID(03)FROM(MSG3) END-EXEC对于CICSESAEXEC CICS ENTER TRACENUM(01)FROM(MSG1) END-EXECEXEC CICS ENTER TRACENUM(02)FROM(MSG2) END-EXECEXEC CICS ENTER TRACENUM(03)FROM(MSG3) END-EXEC以后对程序使用CEDF跟踪时,这些语句就能中断停下来,从而能察看、修改MSG1,MSG2,MSG3这三个COBOL变量的

27、值。5.5 后台应用程序的调试在CICS中有些应用程序只在后台运行,并不在终端上做输入输入。比如那些让用户从WEB上调用的程序,或者由其他CICS区域DPL调用的程序等等。那么这种程序该怎么样调试呢?CICS提供了一个内置事务CEDX专门用来调试跟踪这些与终端无关的后台应用程序。使用方法为在任意一终端上运行CEDX 所要调试的事务ID,就可以了,终端上提示:TRANSACTION XXXX: EDF ON,一旦系统中该事务被启动,马上就会在终端上被CEDX发现,然后中断,接下来就可以进行类似于CEDF的调试、跟踪了。例如,首先在一终端上输入:CEDX PA99,回显:TRANSACTION PA99: EDF ON,表示CEDX已在当前终端上对PA99事务进行监视了。接下来在任意终端上运行PA99,你会发现好像被卡住了一样,同时运行CEDX的终端上开始出现类似于CEDF一样的调试信息了,如图5.22,接下来就可以用CEDF的调试方法进行调试了。图 5.22 使用CEDX调试后台程序5.9 CECI及CECS命令CECI 和 CECS是CICS内置的两个事务,C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论