获取 CL 转储

当 CL 程序或 CL 过程正在运行时,可以获取 CL 程序或 CL 过程转储。

CL 转储由程序或过程的消息队列上的所有消息以及程序或过程中使用的所有变量的值的列表组成。 此信息可能有助于确定影响程序或过程处理的问题的原因。

要获取 CL 转储,请完成下列其中一项任务:

  • 运行 Dump CL Program (DMPCLPGM) 命令。 此命令只能在 CL 程序或 CL 过程中使用,并且不能结束 CL 程序或 CL 过程。
  • 输入 D 以响应查询消息 CPA0701 或 CPA0702。 每当系统从 CL 程序或 CL 过程接收到不受监视的脱离消息时,系统都会发送此消息。 如果程序正在交互式作业中运行,那么系统会将消息发送到作业的外部消息队列。 如果程序作为批处理作业运行,那么系统会将消息发送到系统操作员消息队列 QSYSOPR。
  • 为作业指定 INQMSGRPY (*SYSR丙基)。 IBM提供的系统应答列表为消息 CPA0702 或 CPA0701指定应答 D。 如果系统接收到其中一条查询消息,那么系统将打印转储。
  • 将消息 CPA0701 或 CPA0702 的缺省应答从 C (取消程序) 更改为 D (转储过程)。 每当 CL 程序或 CL 过程中发生函数检查时,这将打印过程转储。 要更改缺省值,请输入以下命令:
    
    CHGMSGD MSGID(CPA0702) MSGF(QCPFMSG) DFT(D)
    
    注: 安全主管或对 QCPFMSG 文件具有更新权限的其他用户必须输入 CHGMSGD 命令。

更改消息缺省值会导致在以下任何情况下打印转储:

  • 系统操作员消息队列处于缺省方式,并且消息是从批处理作业发送的。
  • 显示站用户在未输入响应的情况下按 Enter 键,导致使用消息缺省值。
  • 为作业指定了 INQMSGRPY (*DFT)。

           1
 5722SS1 V5R3M0  040201                  Control Language         MYLIB/DUMPER          SYSNAME  05/06/00  11:05:032 Page 1
 
 Job name . . . . . . . . :  DSP043  User name . . . . . . :   SMITH 3  Job number  . . . . . . : 01329 3
 Program name . . . . . . :  DUMP4   Library . . . . . . . :   MYLIB4   Statement . . . . . . . : 1200 5
 Module name  . . . . . . :  DUMP      Procedure name  . . . :   DUMP
 
                                                              Messages
 
             Message 6                   Message                         From                         To
 Time        ID                  Sev       Type    Text                    Program          Inst        Program          Inst
 110503      CPC2102             00        COMP    Library LARRY created.  QLICRLIB         *N          DUMP             *N
 110503      CPF2110             40        ESC     Library MOE not found.  QLICLLIB         *N          DUMP             *N
 
                                                             Variables 7
 
 Variable           Type        Length             Value                          Value in Hexadecimal
                                                    *...+....1....+....2....+     * . . . + . . . . 1 . . . . + . . . . 2 . . . . +
 &ABC               *CHAR                10        'ONE       '                   D6D5C540404040404040
 &XYZ               *CHAR                10        'TWO       '                   E3E6D640404040404040
 
                                          * * * * *   E N D   O F   D U M P   * * * * *
第 1 年
IBM i 操作系统的程序编号、版本、修改级别和日期。
2
打印转储的日期和时间。
3
运行过程的作业的标准名称。
4
程序的名称和库。
5 代
执行转储时正在运行的语句的编号。 如果命令是嵌套命令,那么语句号是外部命令的语句号。
6
呼叫消息队列上的每条消息,包括发送消息的时间,消息标识,严重性,类型,文本,发送程序和指令号以及接收程序和指令号。
7
过程中声明的所有变量,包括变量名称,类型,长度,值和十六进制值。

如果十进制变量包含无效的十进制数据,那么字符和十六进制值将打印为 *CHAR 变量。

如果找不到变量的值,那么将打印 *NOT ADDRES可寻址。 如果在命令处理程序中对指定了 TYPE (*NULL) 或 PASSVAL (*NULL) 参数的命令使用 CL 过程,或者对该参数指定了 RTNVAL (*YES) 并且未在命令上编码返回变量,那么会发生此情况。

如果将变量声明为 TYPE (*LGL) ,那么它在转储上显示为长度为 1 的 *CHAR。