向程序添加断点

要向要调试的程序添加断点,请使用 Add Breakpoint (ADDBKP) 命令。

最多可以在一个 ADDBKP 命令上指定 10 个语句标识。 ADDBKP 命令上指定的程序变量仅适用于该命令上指定的断点。 在一个 ADDBKP 命令中最多可以指定 10 个变量。

您还可以指定要将断点添加到的程序的名称。 如果不指定要将断点添加到的程序的名称,那么会将断点添加到 STRDBG , CHGDBG 或 ADDPGM 命令上指定的缺省程序。

要向程序添加断点,请指定语句标识,可以是:

  • 语句标签
  • 语句号
  • 机器接口 (MI) 指令号

向程序添加断点时,还可以指定要在到达断点时显示其值或部分值的程序变量。 这些变量可以字符或十六进制格式显示。

在处理指令之前,程序处理在断点处停止。 对于交互式作业,系统显示程序已停止的断点以及 (如果请求) 程序变量的值。

在高级语言程序中,可以将不同的语句和标签映射到相同的内部指令。 当程序中有多个不可操作的语句 (例如 DO 和 ENDDO) 相互跟随时,会发生此情况。 您可以使用 IRP 列表来确定将哪些语句或标签映射到同一指令。

将不同语句映射到同一指令的结果是,要添加的断点可能重新定义先前为不同语句添加的断点。 发生此情况时,新的断点将替换先前添加的断点,即除去先前的断点并添加新的断点。 显示此信息后,可以执行下列任何操作:

  • 通过按 F3来结束最近的请求。
  • 按 Enter 键继续程序处理。
  • 通过按 F10,转至下一个请求级别的命令条目屏幕。 从此屏幕,您可以:
    • 输入可在交互式调试环境中使用的任何 CL 命令。 您可以显示或更改程序中变量的值,添加程序或从调试方式中除去程序,或者执行其他调试命令。
    • 通过输入 Resume Breakpoint (RSMBKP) 命令继续处理程序。
    • 通过按 F3键返回到断点屏幕。
    • 通过输入 End Request (ENDRQS) 命令返回到上一请求级别的命令条目屏幕。

对于批处理作业,可以在到达断点时调用断点程序。 必须创建此断点程序以处理断点信息。 将断点信息传递到断点程序。 断点程序是另一个程序,例如 CL 程序,它可以包含您为交互式作业以交互方式输入的相同命令 (函数请求)。 例如,程序可以显示和更改变量,或者添加和除去断点。 可以请求在批处理作业中有效的任何功能。 当断点程序完成处理时,正在调试的程序将继续。

对于调试作业的每个断点,将在作业记录中记录一条消息。

以下 ADDBKP 命令将断点添加到程序 CUS310。 CUS310 是缺省程序,因此不必指定它。 当达到第二个断点时,变量 &ARBAL 的值就会显示出来。


ADDBKP  STMT(900)
ADDBKP  STMT(2200)  PGMVAR('&ARBAL')
注: 必须将 CL 变量括在单引号内。

CUS310 的源如下所示。

注: 通过使用代码示例,您同意 代码许可证和免责声明信息的条款。

5728PW1 R01M00  880101                  SEU SOURCE LISTING
 
SOURCE FILE . . . . . . .  QGPL/QCLSRC
MEMBER  . . . . . . . . .  CUS310
 
SEQNBR*...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 
6 ...+... 7 ...+... 8 ...
  100 PGM   PARM(&NBRITEMS &ITEMPRC &PARBAL &PTOTBAL)
  200   DCL VAR(&PARBAL)   TYPE(*DEC) LEN(15 5) /* 
INPUT AREA INV BALANCE */
  300   DCL VAR(&PTOTBAL)  TYPE(*DEC) LEN(15 5) /* 
INPUT TOTAL INV BALANCE*/
  400   DCL VAR(&NBRITEMS) TYPE(*DEC) LEN(15 5) /* 
NUMBER OF ITEMS        */
  500   DCL VAR(&ITEMPRC)  TYPE(*DEC) LEN(15 5) /* 
PRICE OF THE ITEM      */
  600   DCL VAR(&ARBAL)    TYPE(*DEC) LEN(5 2)  /* 
AREA INVENTORY BALANCE */
  700   DCL VAR(&TOTBAL)   TYPE(*DEC) LEN(5 2)  /* 
TOTAL INVENTORY BALANCE*/
  800   DCL VAR(&TOTITEM)  TYPE(*DEC) LEN(5 2)  /* 
TOTAL PRICE OF ITEMS   */
  900   CHGVAR     VAR(&ARBAL) VALUE(&PARBAL)
 1000   CHGVAR     VAR(&TOTBAL) VALUE(&PTOTBAL)
 1100   IF COND(&NBRITEMS *EQ 0) THEN(DO)
 1200      SNDPGMMSG  MSG('The number of items is zero.  This item +
 1300                   should be ordered.') TOMSGQ(INVLIB/INVQUEUE)
 1400      GOTO       CMDLBL(EXIT)
 1500   ENDDO
 1600   CHGVAR     VAR(&TOTITEM) VALUE(&NBRITEMS * &ITEMPRC)
 1700   IF COND(&NBRITEMS *GT 50) THEN(DO)
 1800      SNDPGMMSG  MSG('Too much inventory for this item.') +
 1900                 TOMSGQ(INVLIB/INVQUEUE)
 2000   ENDDO
 2100   CHGVAR     VAR(&ARBAL)   VALUE(&ARBAL + &TOTITEM)
 2200   IF COND(&ARBAL *GT 1000) THEN(DO)
 2300      SNDPGMMSG  MSG('The area has too much money in +
 2400                   inventory.') TOMSGQ(INVLIB/INVQUEUE)
 2500   ENDDO
 2600   CHGVAR     VAR(&TOTBAL)  VALUE(&TOTBAL + &TOTITEM)
 2700   EXIT:      ENDPGM

由于到达第一个断点,将显示以下内容:


                          Display Breakpoint
 
Statement/Instruction . . . . . . . . . :   900 /0009
Program . . . . . . . . . . . . . . . . :   CUS310
Recursion level . . . . . . . . . . . . :   1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Press Enter to continue.
 
F3=Exit program   F10=Command entry
 

由于到达第二个断点,将显示以下内容:


                          Display Breakpoint
 
Statement/Instruction . . . . . . . . . :   2200 /0022
Program . . . . . . . . . . . . . . . . :   CUS310
Recursion level . . . . . . . . . . . . :   1
Start position  . . . . . . . . . . . . :   1
Format  . . . . . . . . . . . . . . . . :   *CHAR
Length  . . . . . . . . . . . . . . . . :   *DCL
 
Variable  . . . . . . . . . . . . . . . :   &ARBAL
  Type  . . . . . . . . . . . . . . . . :     PACKED
  Length  . . . . . . . . . . . . . . . :     5 2
 '610.00'
 
 
 
 
 
 
 
Press Enter to continue.
 
F3=Exit program   F10=Command entry
 

显示的是变量 &ARBAL。 (请注意,&ARBAL 的值会根据传递给程序的参数值而变化) 您可以按 F10 来显示命令输入显示屏,这样就可以更改变量 &ARBAL 的值,从而改变程序的处理过程。 您可以使用 Change Program Variable (CHGPGMVAR) 命令来更改变量的值。