0

我对如何找到 pgm 的堆栈有疑问?

EX:我们有三个 pgms PGM 1、PGM 2、PGM 3。

但是 PGM1 调用 PGM 2 和 PGM 2 调用 PGM 3。

我们如何检查 PGM 2 调用的 PGM 3,因为我们只知道 PGM 3。我们不知道其他 pgms。

是否有命令检查 PGM 的堆栈。哪个 PGM 被哪个 PGM 调用而不检查源代码。

谢谢!莫哈末瓦西姆

4

3 回答 3

2

检查QWVRCSTK API:qwvrcstk API,相当于JOB信息选项11=Display Call Stack

此处示例:RPGLE find 调用程序名称

于 2017-06-21T20:31:58.683 回答
0

如果您想以编程方式检查这一点,您可以向程序调用堆栈条目发送一条程序消息。

SNDPGMMSG  MSG(' ') TOPGMQ(*SAME &PGMNAME) KEYVAR(&KEYVAR)

如果您收到 CPF2469 或 CPF2479 消息,则程序不在调用堆栈上。

如果你没有收到错误,那么程序就在调用堆栈上。

您可以使用 &KEYVAR 变量从消息队列中删除刚刚发送的消息。

于 2017-06-21T20:30:45.557 回答
0

当程序 (PGM3) 处于活动状态时,您可以显示它的调用堆栈。在 WRKACTJOB 屏幕中,在条目旁边放置“5=Work With”,然后从下一个菜单选项“11=Display Call Stack”。活动程序应位于(或接近)列表的末尾。

当然,这并不能保证这是程序可以被调用的唯一途径(如果不扫描源代码或使用更改管理实用程序,这似乎是不可能知道的)。

于 2017-06-21T20:18:38.857 回答