CL12.docx
- 文档编号:15128753
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:33
- 大小:33.36KB
CL12.docx
《CL12.docx》由会员分享,可在线阅读,更多相关《CL12.docx(33页珍藏版)》请在冰点文库上搜索。
CL12
第十章调试ILE程序
调试让你检查、诊断和排除程序中的错误,可用ILE源码调试程序来调试ILE程序。
这章介绍如何使用ILE源码调试程序。
它包括:
准备要调试的ILE程序
启动调试环境
从调试环境增加或取消程序
从调试环境显示程序源码
设置及取消条件或非条件断点
单步通过程序
显示变量的值
修改变量的值
显示变量的属性
使速记名等于一个变量、表达式或调试命令
在调试和检查程序时,要保证库列表改为程序直接处理有测试数据的测试库,这样才能不影响实际数据的内容。
可用下列命令避免修改在产品库中的数据库文件:
用有UPDPROD(*NO)的STRDBG命令
用CHGDBG命令
上面两个命令的详细内容请看CL参考手册。
ILE源码调试的内容请看ILE概念一书的第九章。
10.1ILE源码调试
用ILE源码调试来检查和排除程序目标和服务程序中的错误,也可用于:
调试任何ILECL或混合的ILE语言应用程序
在程序运行时用调试命令监控程序流程
显示程序源码
设置和取消条件或非条件断点
单步通过一定数目的语句
显示或修改变量的值
显示变量的属性
在由于断点或单步命令程序停止时,给出在程序停止点上应用程序模块目标的内容。
此时,可以输入更多的调试命令。
用源码调试之前,在用CRTCLMOD或CRTBNDCL生成模块目标或程序目标时,必须用调试选项DBGVIEW,在设置断点或其它ILE源码调试选项后,才能调用程序。
10.2调试命令
做ILE源码调试可以使用很多调试命令。
这些命令和参数是在显示模块源码和表达式求值显示底部的命令行中输入的。
可以用大写、小写或混合方式输入命令。
注:
在源码调试命令行输入的调试命令不是CL命令。
表10-1给出这些调试命令,联机帮助会说明这些命令以及它们的缩写:
表10-1ILE源码调试命令
调试命令
说明
ATTR
允许显示变量的属性。
这些属性是在调试符号表中的一条记录,包括大小和类型。
BREAK
在程序检查时允许输入条件及非条件断点。
用BREAK位置WHEN表达式来输入一个条件断点。
CLEAR
取消条件或非条件断点。
DISPLAY
显示由EQUATE命令分配的名字和定义。
也允许显示与‘显示模块源码’中不同的源模块。
模块必须在当前程序目标中存在。
EQUATE
允许分配一个表达式变量或调试命令给一个速记名使用。
EVAL
显示或修改变量的值或显示表达式的值。
QUAL
定义随后出现在EVAL命令中的变量范围。
STEP
运行被调试程序的一个或多个语句。
FIND
查找当前显示模块的指定参数或串的说明。
UP
把显示窗口向前移动到显示开始的指定数。
DOWN
把显示窗口向前移动到显示结尾的指定数。
LEFT
把显示窗口向左移动到规定字符数。
RIGHT
把显示窗口向右移动到规定字符数。
TOP
使显示定位于第一行。
BOTTOM
使显示定位于最后一行。
NEXT
使显示定位于当前显示源码的下一个断点。
PREVIOUS
使显示定位于当前显示源码的前一个断点。
HELP
对源码调试命令给出可用的帮助信息。
SET
对所有后续的FIND是否区别大小写,也允许修改更新产品文件的值。
WATCH
显示当前活动监视条件的列表。
10.3准备要调试的程序目标
在用ILE源码调试前,必须用CRTCLMOD或CRTBNDCL命令且规定DBGVIEW选项。
对每个要调试的CL模块,可以生成一个或三个视图:
根源码视图
清单视图
语句视图
10.3.1使用根源码视图
根源码视图包括源成员中的源语句。
要一起使用ILE源码调试和根源码视图,ILECL编译程序在生成模块(*MONDLE)时生成根源码。
注:
生成模块是用引用根源目标中源语句的位置,而不是把源语句复制到显示中,这样不能在生成模块和生成模块所用成员之间修改、改名或移动根源成员。
要用根源码视图调试ILECL模块,在CRTCLMOD或CRTBNDCL命令中,对DBGVIEW规定*SOURCE或*ALL。
下面是生成一个根源码视图的方法之一:
CRTCLMODMODULE(MYLIB/MYPGM)SRCFILE(MYLIB/QCLLESRC)SRCMBR(MYPGM)TEXT('CL
Program')DBGVIEW(*SOURCE)
它生成MYPEM模块的一个根源码视图。
10.3.2使用清单视图
一个清单视图非常类似于编译清单的源码部分或用ILECL编译程序产生的假脱机文件。
要用清单视图调试模块,在用CRTCLMOD或CRTBNDCL命令生成模块时规定DBGVIEW为*LIST或*ALL。
生成清单视图的一个方法为:
CRTCLMOD
MODULE(MYLIB/MYPGM)SRCFILE(MYLIB/QCLLESRC)SRCMBR(MYPGM)TEXT('CLProgram')
DBGVIEW(*LIST)
10.3.3使用语句视图
一个语句视图不包括任何CL源数据,但可用过程名和在编译清单中找到的语句号加一些断点。
要用语句视图调试程序,需要复制编译清单。
注:
在用语句视图调试时,在‘显示模块源码’显示中没有数据给出。
要用语句视图调试程序,在用CRTCLMOD或CRTBNDCL命令生成模块时,要规定DBGVIEW为*STMT,*SQURCE,*LIST或*ALL。
生成语句视图的一个方法是:
CRTCLMODMODULE(MYLIB/MYPGM)SRCFILE(MYLIB/QLSRC)SRCMBR(MYPGM)TEXT('CLProgram')
DBGVIEW(*STMT)
10.4启动ILE源码调试
在生成调试视图后,可以开始调试应用程序了。
用STRDBG命令来启动ILE源码调试,调试一旦启动,那么仅在输入ENDDBG命令后才结束。
开始,用STRDBG的PGM参数可以把多至20个程序加到调试环境中,它们可以是ILE或OPM程序。
要启动调试三个程序的调试环境,进入下列命令:
STRDBGPGM(*LIBL/MYPGM1*LIBL/MYPGM2*LIBL/MYPGM3)DBGMODSRC(*YES)
注:
对加到调试环境的程序必须有*CHANGE的权限。
在输入STRDBG命令后,出现‘显示模块源码’的显示,其中给出程序中联编的第一个模块。
10.5往调试环境中加一个程序目标
在启动调试环境后,可往其中加多个程序目标,在‘处理模块列表’显示中的第一行用选项1,再写上程序名即可。
在表10-1列出了调试命令。
‘处理模块列表’显示可从‘显示模块源码’显示中按F14键得到。
要加一个服务程序,把缺省的程序类型从*PGM改为*SRVPGM。
在任何时间对加到调试环境中的程序数目都没有限制。
WorkwithModuleList
System:
SYSTEM01
Typeoptions,pressenter.
1=Addprogram4=Removeprogram5=Displaymodulesource
8=Workwithmodulebreakpoints
OptProgram/moduleLibraryType
1weekday2*LIBL*PGM
DSPWKDAYMYLIB*PGM
DSPWKDAY*MODULESelected
AABP1*MODULE
Bottom
Command
===>
F3=ExitF4=PromptF5=RefreshF9=RetrieveF12=Cancel
图10-1往调试环境中加一个ILE程序
在按执行键后,程序WEEKDAY2加到调试环境中。
WorkwithModuleList
System:
SYSTEM01
Typeoptions,pressenter.
1=Addprogram4=Removeprogram5=Displaymodulesource
8=Workwithmodulebreakpoints
OptProgram/moduleLibraryType
WEEKDAY2*LIBL*PGM
WEEKDAY2MYLIB*PGM
WEEKDAY2*MODULE
DSPWKDAYMYLIB*PGM
DSPWKDAY*MODULESelected
AABP1*MODULE
Bottom
Command
===>
F3=ExitF4=PromptF5=RefreshF9=RetrieveF12=Cancel
ProgramWEEKDAY2addedtosourcedebugger.
图10-2往调试环境加一个ILE程序
在显示底部出现的信息表示WEEKDAY2已加到调试环境中,在做完加程序后,用F3键结束,回到‘显示模块源码’的显示中,也可用选项5来选择和显示一个模块。
要往调试环境中加一个OPM程序,用ADDPGM命令,在任何时候都可以往调试环境中加多至20个OPM程序。
10.6从调试环境中去掉一个程序目标
在启动调试环境后,可从中取消一个程序,在‘处理模块列表’显示中,在要取消的程序的OPT列写4。
看图10-3。
这个显示可从‘显示模块源码’显示中用F14键得到。
要取消一个服务程序,把程序类型从*PGM改为*SRVPGM。
WorkwithModuleList
System:
SYSTEM01
Typeoptions,pressenter.
1=Addprogram4=Removeprogram5=Displaymodulesource
8=Workwithmodulebreakpoints
OptProgram/moduleLibraryType
*LIBL*PGM
4WEEKDAY2MYLIB*PGM
WEEKDAY2*MODULE
DSPWKDAYMYLIB*PGM
DSPWKDAY*MODULESelected
AABP1*MODULE
Bottom
Command
===>
F3=ExitF4=PromptF5=RefreshF9=RetrieveF12=Cancel
图10-3从调试环境中取消一个程序
在按执行键后,程序WEEKDAY2从调试环境中取消了。
WorkwithModuleList
System:
SYSTEM01
Typeoptions,pressenter.
1=Addprogram4=Removeprogram5=Displaymodulesource
8=Workwithmodulebreakpoints
OptProgram/moduleLibraryType
*LIBL*PGM
DSPWKDAYMYLIB*PGM
DSPWKDAY*MODULESelected
AABP1*MODULE
Bottom
Command
===>
F3=ExitF4=PromptF5=RefreshF9=RetrieveF12=Cancel
ProgramWEEKDAY2removedfromsourcedebugger.
图10-4从调试环境中取消一个ILE程序
做完从调试环境取消程序时,用F3键回到前屏。
注:
要从调试环境取消程序时,必须对程序有*CHANGE权限。
要从调试环境取消一个OPM程序,用RMVPGM命令。
10.7程序源码视图
‘显示模块源码’显示一次给出一个程序目标的一个模块。
如果模块是用下列调试视图选项编译的,就可以显示模块的源码:
DBGVIEW(*ALL)
DBGVIEW(*SQURCE)
DBGVIEW(*LISTING)
有两种方法来修改在显示中给出的内容:
修改一个视图
修改一个模块
在修改视图时,IEL源码调试程序映象给出修改视图的相同位置。
在修改模块时,把显示视图上的可执行语句放在内存,在重新显示模块时再给出视图。
有断点设置的行号高亮显示。
在断点、单步或信息导致程序停止给出显示时,发生事件的原行高亮度显示。
10.8修改模块目标
可在‘处理模块列表’显示中用选项5来修改目标模块。
从‘显示模块源码’中用F14键可访问图10-5给出的显示。
要选择一个模块,在它的OPT列写5。
DisplayModuleSource
Program:
DSPWKDAYLibrary:
MYLIBModule:
DSPWKDAY
24500-CALLPGM(WEEKDAY2)PARM(&DAYOFWK)
25600-IFCOND(&DAYOFWK*EQ1)THEN(CHGVAR+
26700VAR(&WEEKDAY)VALUE('Sunday'))
27800-ELSECMD(IFCOND(&DAYOFWK*EQ2)THEN(CHGV
28900VAR(&WEEKDAY)VALUE('Monday')))
291000-ELSECMD(IFCOND(&DAYOFWK*EQ3)THEN(CHGV
301100VAR(&WEEKDAY)VALUE('Tuesday')))
311200-ELSECMD(IFCOND(&DAYOFWK*EQ4)THEN(CHGV
321300VAR(&WEEKDAY)VALUE('Wednesday')))
331400-ELSECMD(IFCOND(&DAYOFWK*EQ5)THEN(CHGV
341500VAR(&WEEKDAY)VALUE('Thursday')))
351600-ELSECMD(IFCOND(&DAYOFWK*EQ6)THEN(CHGV
361700VAR(&WEEKDAY)VALUE('Friday')))
371800-ELSECMD(IFCOND(&DAYOFWK*EQ7)THEN(CHGV
381900VAR(&WEEKDAY)VALUE('Saturday')))
More...
Debug...
F3=EndprogramF6=Add/ClearbreakpointF10=stepF11=Displayvariable
F12=ResumeF17=WatchvariableF18=WorkwithwatchF24=Morekeys
图10-5显示一个模块视图
在选择好后,用执行键,则给出选择的模块目标。
另一个方法是用DISPLAY调试命令,在调试命令行,写:
DISPLAYMOUDLE模块名
要显示的模块一定要在加到调试环境里的程序或服务程序中存在。
10.8.1修改模块的视图
根据在生成ILE模块时规定的值,有几个视图可用。
它们是:
根源码视图
清单视图
语句视图
可通过‘选择视图’显示来修改在‘显示模块源码’显示中给出的视图。
可在‘显示模块源码’显示中用F15键来得到‘选择视图’的显示,如图10-6。
当前视图在窗口的顶部列出,其它的可用视图列在下边。
在一个程序中的每个模块可有不同可用视图的分组,这是根据生成它时所用的调试选项决定的。
要选择一个视图,在OPT列写1。
DisplayModuleSource
..............................................................................
:
SelectView:
:
:
:
CurrentView...:
CLRootSource:
:
:
:
Typeoption,pressEnter.:
:
1=Select:
:
:
:
OptView:
:
CLRootSource:
:
1CLListingView:
:
:
:
:
:
Bottom:
:
F12=Cancel:
:
:
:
............................................................................:
More...
Debug...
F3=EndProgramF6=Add/ClearbreakpointF10=StepF11=Displayvariable
F12=ResumeF17=WatchvariableF18=WorkwithwatchF24=Morekeys
图10-6修改模块的视图
选择好后,用执行键,则给出模块的视图。
10.8.2设置和取消断点
可设置断点来在程序运行时的某点上停止程序。
无条件断点在一个规定的语句停止程序,条件断点在规定的语句中符合规定条件时停止程序。
在程序停止时,给出‘显示目标源码’显示,给出在发生断点的那行的相应模块的源码。
这行是高亮显示,在此点上,可以给变量赋值,设置断点,及运行其它调试命令。
在使用断点之前,要知道以下特点:
在旁路断点时,比如GOTO语句,断点就不执行
在一个语句上设置断点时,在处理此语句前发生中断
在到达条件断点语句时,在处理此语句前计算与断点相关的条件表达式
通过调试命令来规定断点功能,这些功能包括:
加断点
取消断点
显示断点信息
在达到断点后,重新运行程序
10.8.3设置和取消无条件断点
可用下列方法设置和取消非条件断点:
从‘显示模块源码’显示用F6键
从‘显示模块源码’显示用F13键
用BREAK设置断点
用CLEAR取消断点
设置和取消断点最简单的方法是从‘显示模块源码’显示中用F6键。
要用F6键来设置无条件断点,把光标放在要设断点的那行,按F6键。
要取消无条件断点,把光标放在要取消断点的那行,按F6键。
对要设置无条件断点的重复上面的步骤。
注:
如果要设断点的行不是一个可运行语句,那么断点没在下一个可运行语句上。
在设好断点后,用F3键结束,也可用F21键来从命令行调用程序。
在到达断点时,程序停止,再次出现‘显示模块源码’的显示。
这时,可以给变量赋值、设断点和运行任何调试命令。
设置和取消无条件断点的另一个方法是用BREAK和CLEAR调试命令。
在调试命令行输入:
BREAK行号
CLEAK行号
其中行号是在当前视图中要设置或取消断点的行号。
如果使用语句视图,没有显示的行号,那么在调试命令行输入:
BREAK过程名/语句号
过程名是CL模块名,语句号(来自编译清单)是要停止的语句号码。
10.8.4设置和取消条件断点
可用下列语句设置和取消条件断点:
处理断点显示
BREAK调试命令
CLEAR调试命令
10.8.4.1使用处理断点显示
注:
条件断点所用的关系操作符是:
<,>,=,<=,>=,<>
设置和取消条件断点的一个方法是通过‘处理模块断点’的显示。
这个显示可由‘显示模块源码’显示中用F13键取得,如图10—7所示,要设置条件断点:
在OPT列写1
在要设断点的Line列写行号
在Condition列写条件表达式
然后按执行键。
如图10—7所示。
要取消一个条件断点,在要取消的OPT列写4,按执行键,也可用此方法取消无条件断点。
WorkwithModuleBreakpoints
System:
SYSTEM01
Program...:
MYPGMLibrary...:
MYLIB
Module...:
MYMODType.....:
*PGM
Typeoptions,pressEnter.
1=Add4=Clear
OptLineCondition
135____&I=21______________________
___________________________________
10-7设置条件断点
重复前面步骤,即可设置和取消各个断点。
注:
如果要设断点的行不是一个可运行语句,那么断点没在下一个可运行语句上。
在设置或取消所有断点后,用F3键结束,回到‘显示模块源码’显示中,然后再用F3键结束此显示,也可用F21键从命令行调用程序。
当到达条件断点的语句时,在语句运行前计算有关的条件表达式。
如果结果为假,程序继续运行,如果条件为真,程序停止,显示‘模块源码显示’,此时可以给变量赋值,设置更多断点及运行任何调试命令。
10.8.4.2用BREAK和CLEAR命令
设置和取消条件断点的另一个方法是由BREAK和CLEAR命令。
BREAK命令格式为:
BREAK行号WHEN表达式
行号是当前显示中要设置断点的行号。
表达式是在到断点时要计算的条件表达式,支持的关系符号为>,<,<=,>=,=,<>
用非数字条件断点表达式,在做比较前,较短的表达式要用空格来填充,它在任何民族语言分类排序(NLSS)之前来做填充,详细信息请看10.8.4.3。
要用CLEAR取消一个条件断点,在调试命令行上输入:
CLEAR行号
行号是当前显示的要取消断点的行号。
用语句视图,不显示行号,要设置断点,在调试命令行上用:
BREAK过程名/语句名WHEN表达式
10.8.4.3民族语言分类排序(NLSS)
非数字条件断点表达式分为下列二类:
字符—8:
每个字符8位
字符—16:
每个字符16位(DBCS)
NLSS仅提供字符—8的非数字条件断点表达式。
表10—2给出非数字条件断点表达式的可能组合。
字符—8表达式的分类由源码调试程序所用的排序表是在CRTCLMOD或CRTBNDCL命令中的SRTSEQ参数规定的分类排序表。
如果涉及的分类排序表是*HEX,则不用分类排序表。
这样,源码调试程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CL12