我正在努力嘗試除錯一個利率計算的問題,該計算是在AS400系統的RPG程式中對幾百萬條記錄中的幾千條記錄進行的。現在,在一個非常大的表中,有極少數的記錄被分配了荒謬的利息值(在幾個月的時間內是原則的數倍)。
我一直試圖通過使用內置的 as400 除錯器來解決這個問題,通過除錯特定的問題記錄來確定計算失敗的原因。然而,我一直找不到直接讀取問題記錄之一或以其他方式在除錯器中訪問它的方法(我曾嘗試使用條件中斷點,但由于表的大小,它們的時間效率很低)。
在RPG Dow %eof型別的回圈中進行除錯時,是否有辦法直接訪問/讀取一個特定的記錄?
uj5u.com熱心網友回復:
是否有一種方法可以在RPG Dow %eof型別的回圈中直接訪問/讀取一個特定的記錄? 在RPG Dow %eof型別的回圈中進行除錯的方法
沒有。你需要使用CHAIN或SETLL/READE來訪問一個特定的記錄。
假設你沒有單獨的開發/測驗環境......
在不改變程式代碼的情況下,你可以創建一個新的表副本,其中只有有問題的記錄。 然后使用覆寫資料庫檔案 (Override Database File, OVRDBF) 命令來強制你的程式訪問該表的副本,而不是普通的副本。
如果你有一個獨立的環境,你仍然可以將資料縮減到有問題的記錄。
uj5u.com熱心網友回復:
一個正在運行的程式可以運行
STRDBG命令來啟動自己身上的除錯器。修改程式以檢查錯誤狀況。當它發生時,讓程式呼叫QCMDEXC并運行STRDBG PgmName updprod(*yes)命令。除錯器開始了,代碼停在了啟動除錯器的陳述句處。** ---------------------- pr_qcmdexc ------------------------- dpr_qcmdexc pr extpgm('QCMDEXC') d InCmds 9999a const options(*VarSize) d InCmdsLx 15p 5 const ** --------------------------- test0246r --------------------- ** test0246r: strdbg當條件在運行程式中。 dtest0246r pi d vSrcdta s 132a d vSrcseq s 7p 2 d cmds s 256a varying /free 執行 sql 宣告c1游標用于 選擇 a.srcdta, a.srcseq 從qrpglesrc a ; 執行sql 打開c1。 下線 1 = 1 ; 執行sql 取出c1 into :vSrcdta, :vSrcseq ; if sqlcode <> 0 ; 離開。 endif ; // 當seqnbr = 15時,strdbg 如果vSrcseq = 15 ; cmds = 'strdbg test0246r updprod(*yes)' ; pr_qcmdexc( cmds: %len(cmds)) ; endif ; enddo ; 執行 sql 關閉c1 ; *inlr = '1' ; 回傳。 /end-free轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/316529.html
標籤:
