Xiao Qing
作者Xiao Qing·2022-02-22 13:44
系统工程师·浪潮商用机器有限公司

如何DEBUG一个ILE RPG程序?

字数 3578阅读 5169评论 0赞 1

内容提要 :

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(XQLIB/QRPGLESRC)

TEXT( ’ ILE RPG/400 program DEBUGEX ’ )

DBGVIEW(*SOURCE)

这里的 DBGVIEW 有很多参数可以选,它被用来决定可以显示那些程序源代码, DEGVIEW 的所有可选参数含义

如下:

*STMT —允许用编译清单在语句处显示变量值、设置断点,此时,不显示源语句。

*SOURCE —建立与输入的源语句相同的显示。

*COPY —建一个源语句显示并且包括带有 /COPY 成员的源语句的显示。

*LIST —建立与编译清单相同的显示。

*ALL —建立以上所有类型的显示。

*NONE —不产生调试数据。

  1. 用命令 STRDBG 启动 DEBUGER.

STRDBG PGM(MYLIB/DEBUGEX)... UPDPRD(NO/YES)

参数 UPDPRD 用来控制 DEBUGER 是否可以修改数据库中的表。

  1. 调用被调试的程序

CALL PGM(XQLIB/DEBUGEX)

如下图所示:

                            Display Module Source                             
                                                                              
Program:   DEBUGEX     Library:   XQLIB          Module:   DEBUGEX            
   130        129  *                                                          
   131        130 C*EXEC SQL                                                  
   132        131 C* PREPARE sel FROM :select2                                 
   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 
   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 程序在运行过程中的错误。

参考资料 :

https://www.ibm.com/docs/en/i/7.4

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广