2012-10-31 37 views
1

我試圖讓一個RPG程序能夠告訴更多具體的細節,當它裏面的程序調用出錯時。我想監視的異常與壞的程序邏輯無關,比如說除以零。我想檢查的是如果程序調用由於權限問題或程序未找到而失敗。 73-74的指標只能說明存在例外情況,但不是其背後的原因。是否有任何可能的方法來檢測RPG中的這一點,就像CL程序中的MONMSG聲明一樣?是否有可能捕獲RPG程序中的程序調用引發的錯誤消息?

回答

2
+0

錯誤處理操作是否以固定格式工作?我的假設是,這個被調用程序將始終在正常情況下工作,除了沒有權限訪問它的情況或在庫列表中找不到它。像小數點錯誤這樣的事情不在這裏。 –

+0

@God_of_Thunder有錯誤處理的固定格式和自由格式版本。 – jamesallman

+0

如果我期望未找到未經授權的程序或程序之類的東西,我應該使用哪種錯誤代碼? 211? –

3

有兩類錯誤:程序和文件。程序錯誤是被零除,CALL失敗等等。完整列表爲Program Status Codes。這些錯誤代碼非常粗糙 - 如果您調用PGMX並且存在授權問題,您將得到00211.如果程序不在庫列表中,則會得到00211.如果程序異常結束(例如由於轉義消息)你得到一個00211.如果你需要知道爲什麼 CALL失敗,你將需要詢問作業日誌/程序消息隊列。

對於文件錯誤,file information data structure將記錄錯誤代碼。文件錯誤是指參考約束違規或永久I/O錯誤。再次,這些file status codes不是很精細,如果您需要知道您的權限失敗,則需要從作業日誌中找出。

關於文件錯誤的一個注意事項。當你編寫你自己的錯誤處理程序(file exception error subroutine)時,你需要知道這個處理程序在週期打開文件之後纔會激活。這意味着如果讓循環打開文件,則不會捕獲「文件不在庫列表中」或「未授權文件」等錯誤。爲了捕獲在開放時間發生的錯誤,您需要通過OPEN操作碼自行打開文件。不要忘記關閉它們。

+0

我只想找到頂級原因。想分爲零或水平誤差可以看作一種類型。權力問題是另一個問題。未找到程序是第三種類型。 –

+0

您可以將您的應用程序需要的任何方式錯誤地分組。我指出的是_detecting_他們將採取兩個獨立的邏輯過程。一個用於程序錯誤,另一個用於文件錯誤。在舊式代碼中,這將涉及爲程序錯誤創建一個* PSSR,併爲文件錯誤創建一個INFSR。如果您對錯誤處理足夠滿意,則可以使它們成爲相同的SUBR。較新的代碼將使用(e)操作碼擴展器和%狀態,最新的代碼將使用MONITOR塊。 –

+0

是否可以在調用者程序中使用PSDS位置40〜46來說明失敗程序調用的原因? –

相關問題