如何DEBUG一个ILERPG程序

AS/400中的ILE RPG提供DEBUGER工具来调试RPG程序,本文主要描述DEBUGER工具的使用。

ILE RPG的DEBUGER工具可以用来发现程序运行时的错误,它主要能实现:
1.通过光标位置设置断点。
2.单步执行。
3.显示/修改程序中的变量。
4.显示或修改字段、数据结构和数组的值给出字段、表达式。

与DEBUGER相关的调试命令如下:

命令 描述
ATTR 显示一个变量的属性。这些属性是记录在调试符号表中的变量的大小和类型。
BREAK 在被测试程序的某个位置上输入一个条件断点或非条件断点。使用“BREAK 行号WHEN 表达式 ”来输入一个条件断点。
CLEAR 清除条件断点和非条件断点。
DISPLAY

显示用EQUATE命令分配的名字和字义,同时允许显示与当前画面显示模块源码屏幕上的源程序不同的模块,这个部分模块目标必须存在于当前程序目标中。
EQUATE 允许分配一个表达式、变量或调试命令的速记名。
EVAL 显示或修改变量的值,或者显示表达式、记 录、数据结构或数组的值。
QUAL 定义出现在“EVAL”命令后面变量的范围。这个命令只用于带局部变量的语言。例如ILE C/400,ILE RPG/400不用它。
STEP 运行被调试程序的一个或多个语句。
FIND 在当前显示的模块向前或向后检索一个指定的行号或字符或文本。
UP 把源码显示窗口往前移到以输入数为开始行的那一屏。
DOWN 把源码显示窗口往前移到以输入数为末尾行的那一屏显示。
LEFT 使源码显示窗口左移。
RIGHT 向右移动源码显示窗口,移动的列数是你输入的字符数。
TOP 窗口定位在从第一行显示。
BOTTOM 窗口定位在最后一行。
NEXT 窗口定位到(以当前显示为基准的)下一个断点那一屏显示。
PREVIOUS 定位窗口到(以当前显示为基准的)前一个断点那一屏显示。
HELP 对可用的源码调试命令显示联机帮助信息。

表一

DEBUG一个程序的过程
1.用CRTBNDRPG或CRTRPGMOD命令编译源程序。
例如:
CRTBNDRPG PGM(MYLIB/DEBUGEX) SRCFILE(MYLIB/QRPGLESRC)
TEXT(’ILE RPG/400 program DEBUGEX’)
DBGVIEW(*SOURCE)
这里的DBGVIEW有很多参数可以选,它被用来决定可以显示哪些程序源代码,DEGVIEW的所有可选参数含义
如下:
*STMT —允许用编译清单在语句处显示变量值、设置断点,此时,不显示源语句。
*SOURCE—建立与输入的源语句相同的显示。
*COPY —建一个源语句显示并且包括带有/COPY成员的源语句的显示。
*LIST —建立与编译清单相同的显示。
*ALL —建立以上所有类型的显示。
*NONE —不产生调试数据。

2.用命令STRDBG启动DEBUGER.
STRDBG PGM(MYLIB/DEBUGEX)... UPDPRD(*NO/*YES)
参数UPDPRD用来控制DEBUGER是否可以修改数据库中的表。

 

3.调用被调试的程序
CALL PGM(MYLIB/DEBUGEX)
如下图所示:
Display Module Source

Program: DEBUGEX Library: MYLIB Module: DEBUGEX
130 129 *
131 130 C*EXEC SQL
132 131 C* PREPARE sel FROM :selct2
133 132 C*END-EXEC
134 133 C Z-ADD 3 SQLER6
135 134 C CALL 'QSQROUTE'
136 135 C PARM SQLCA
137 136 C PARM SELCT2
138 137 *
139 138 * Declare the SQL cursor to hold the data retrieved from th
140 139 C*EXEC SQL
141 140 C* DECLARE MYCSR SCROLL CURSOR FOR SEL
142 141 C*END-EXEC
143 142 *
144 143 * Open the SQL cursor.
More...
Debug . . .

F3=End program F6=Add/Clear breakpoint F10=Step F11=Display variable
F12=Resume F17=Watch variable F18=Work with watch F24=More keys

可以在DEBUG画面输入表一中的命令进行调试:
例如:
a)查看某个变量的值
EVAL SQLER6
SQLER6 = 000000003.
EVAL也可以修改某个变量的值
例如: EVAL SQL346=6, 再用EVAL查看结果
EVAL SQLER6
SQLER6 = 000000006.


b)设置断点
BREAK 135 ->在第135行上设置断点。
BREAK 135 WHEN *IN02=’1’ ->当02指示器为‘1’时,在第135行上设置断点。

c)单步或多步执行
step ->单步执行
step 10 ->一次执行十步
step into ->进入某个被调用程序
step over ->一步执行完成

d)查看某个字段的属性
ATTR SQLER6
结果是:TYPE = BINARY, LENGTH = 4 BYTES
其它的调试命令很简单就不多讲了,大家可以在实际工作中去尝试。

4.停止DEBUG.

经过以上四步,可以查找ILE RPG程序在运行过程中的错误。

posted @ 2012-01-09 10:45  静海平心  阅读(725)  评论(0编辑  收藏  举报