获取 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。