我对如何找到 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 调用而不检查源代码。
谢谢!莫哈末瓦西姆
我对如何找到 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 调用而不检查源代码。
谢谢!莫哈末瓦西姆
检查QWVRCSTK API:qwvrcstk API,相当于JOB信息选项11=Display Call Stack
此处示例:RPGLE find 调用程序名称
如果您想以编程方式检查这一点,您可以向程序调用堆栈条目发送一条程序消息。
SNDPGMMSG MSG(' ') TOPGMQ(*SAME &PGMNAME) KEYVAR(&KEYVAR)
如果您收到 CPF2469 或 CPF2479 消息,则程序不在调用堆栈上。
如果你没有收到错误,那么程序就在调用堆栈上。
您可以使用 &KEYVAR 变量从消息队列中删除刚刚发送的消息。
当程序 (PGM3) 处于活动状态时,您可以显示它的调用堆栈。在 WRKACTJOB 屏幕中,在条目旁边放置“5=Work With”,然后从下一个菜单选项“11=Display Call Stack”。活动程序应位于(或接近)列表的末尾。
当然,这并不能保证这是程序可以被调用的唯一途径(如果不扫描源代码或使用更改管理实用程序,这似乎是不可能知道的)。