除錯使用了函式模組的程式時需要注意的一個小問題

ZCLouis發表於2007-10-05

昨天下午複製了一個系統標準程式,在它的 SAP List Viewer 控制元件裡新增一個顯示欄位,結果在內表裡增加了欄位以後,除錯了一個小時也沒能在 List Viewer 中顯示出來。看看所有呼叫的地方該新增的都新增了,就是執行到系統的函式模組 REUSE_ALV_FIELDCATALOG_MERGE 時,新增的欄位就死活出不來。因為快下班了,就沒有繼續調——加班解決問題是個不好的工作習慣。
今天早上來了之後,開啟程式繼續查,在呼叫 REUSE_ALV_FIELDCATALOG_MERGE 的地方加了個斷點,深入函式模組內部繼續觀察。結果,居然昨天沒有顯示的欄位今天自己就出來了,這也太奇怪了吧。

回想這期間做的工作,再聯想到最近看的標準教程,忽然覺悟——由於函式模組所屬的函式組在函式模組被呼叫時會整體載入,同時函式組中間的全域性資料物件也一起被載入,並且在程式執行過程中一直保持。
這樣這個問題就可以解釋了,昨天除錯,一直是在事務碼 SE38 下進行的,無論怎麼改程式,都沒有退出事務碼,也就沒有退出整個程式的內部會話,這樣,REUSE_ALV_FIELDCATALOG_MERGE 所屬的函式組 SALV 也就總在這個內部會話中盤踞著,導致某些 SALV 中的全域性變數在呼叫時值未改變,從而使輸出結果也無法達到預期的內容。而今天是退出 SE38 並重新讀取和執行程式,退出後內部會話所佔用的記憶體已經清除,重新執行時會再次載入函式組並初始化相應全域性變數,這樣用新值運算出來的結果就正確了。

由此想到,學習基礎知識確實非常重要。如果沒有最近學習標準教程,對此問題就無法解釋,最後只能歸於 RPWT,而現在能夠解釋原因並寫出這篇文章為後來的朋友解惑,我也感覺到十分欣慰。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7941665/viewspace-974841/,如需轉載,請註明出處,否則將追究法律責任。

相關文章