通過SAP的錯誤訊息定位出錯的程式的6種方法
在SAP專案中,經常會遇到一個比較複雜的程式報出個錯誤訊息(有時會是一個標準SAP程式報錯),但是不知道到底是哪段ABAP程式碼出錯了。
下面通過一個簡單的例子,來介紹6種方法來定位報message的ABAP程式。
比如在SE38中輸入一個不存在的程式ZSDFSF,點選顯示按鈕,在下面的狀態列會彈出一個訊息,如下:
1, 利用Where use list功能
舉例說明,雙擊狀態列上的訊息,找到message class ID: DS, number 017,如下圖,
SE91,選中對應的訊息,點選where use list按鈕
一般會找到很多程式,
這時候只能靠人工過濾,找到正確的出錯位置,
然後設定斷點,再執行一下程式,確認一下。
2, 設定sy-msgid的watch point斷點
在命令欄輸入/h,回車啟用debug模式,
建立watch point如下:
程式執行後就會自動在message ID ‘DS' ,message號017處停下來。
建立watch point的詳細介面如下:
3, 設定ABAP Command型別斷點
在debug模式下,建立一個abap command型別的斷點,
輸入的abap命令是關鍵字message,如下:
程式執行是就會在每一個執行到的message語句停下。然後進一步定位錯誤。
4, 原始碼查詢
通過SAP標準程式RS_ABAP_SOURCE_SCAN可以搜尋到使用到相關message的abap程式。
SE38所在的package是SEDT,
執行RS_ABAP_SOURCE_SCAN,在package SEDT中查詢關鍵字message 017,
然後手動分析結果,找到出錯的abap程式。
也可以使用CODE_SCANNER來查詢,
5, 使用SAT工具
Tcode SAT,建立一個新的SAT 變式,在變式螢幕中,選擇“Aggregation – None”選項,
然後在SAT主螢幕中輸入SE38,選擇上面建立的變式,執行,
在SE38中輸入一個不存在的程式名,執行後,會顯示跟蹤結果,在結果集中查詢message關鍵字,在Hit list中雙擊行就能跳到具體的ABAP程式碼處。
6, 使用ST05工具
使用ST05跟蹤SE38後,在結果螢幕中,選中object Name是PROGDIR的行,點選display ABAP Call Location按鈕,
在定位到的774行程式附近就能找到相關的報出message的程式碼:
果然在813行找到了message。
注:為什麼要在ST05結果螢幕中找PROGDIR,是因為sap系統中,所有的程式名都儲存在表PROGDIR中,在PROGDIR中找不到就會報錯。。。