我對如何找到pgm的堆棧有疑問嗎?如何檢查AS/400 RPG中的Pgm堆棧?
EX: 我們有三個鉑族金屬PGM 1,PGM 2,PGM 3
然而PGM 2由PGM1和PGM 3呼籲通過PGM 2
叫我們如何檢查PGM 3呼籲通過PGM 2,因爲我們只知道PGM 3.我們不關於其他PGM。
是否有命令檢查PGM的堆棧。哪個PGM由哪個PGM調用而不檢查源代碼。
謝謝! Mohd Wasim
我對如何找到pgm的堆棧有疑問嗎?如何檢查AS/400 RPG中的Pgm堆棧?
EX: 我們有三個鉑族金屬PGM 1,PGM 2,PGM 3
然而PGM 2由PGM1和PGM 3呼籲通過PGM 2
叫我們如何檢查PGM 3呼籲通過PGM 2,因爲我們只知道PGM 3.我們不關於其他PGM。
是否有命令檢查PGM的堆棧。哪個PGM由哪個PGM調用而不檢查源代碼。
謝謝! Mohd Wasim
當程序(PGM3)處於活動狀態時,您可以顯示它的調用堆棧。從WRKACTJOB屏幕中,在條目旁邊放置「5 =工作單位」,然後從下一個菜單選項「11 =顯示調用棧」中選擇。活動程序應該位於列表的末尾(或接近)。
當然,這並不能保證是程序可以調用的唯一途徑(在掃描源代碼或使用變更管理實用程序時似乎不可能知道)。
如果您想以編程方式進行檢查,可以將程序消息發送到程序調用堆棧條目。
SNDPGMMSG MSG(' ') TOPGMQ(*SAME &PGMNAME) KEYVAR(&KEYVAR)
如果您收到CPF2469或CPF2479消息,該程序不在調用堆棧中。
如果您沒有收到錯誤,那麼程序在調用堆棧上。
您可以使用& KEYVAR變量來刪除您剛剛從消息隊列中發送的消息。
檢查QWVRCSTK API:qwvrcstk API,這就是11 =顯示調用堆棧
例這裏作業信息選項等效:RPGLE find Calling program name
只適用於當前正在運行的程序當然......如果你想要整個堆棧,你可以使用'DSPPGMREF PGM(OBJLIB/* ALL)OUTPUT(* OUTFILE)OBJTYPE(* PGM * SRVPGM * MODULE)OUTFILE(YOURBIB/PGMREF)',並且可能在YOURLIB/PGMREF上使用遞歸SQL查詢來獲取所有的調用者/調用者程序 – Dam
你好理查德,謝謝..你的指導。 –