在SAP項目中,經常會遇到一個比較復雜的程序報出個錯誤消息(有時會是一個標准SAP程序報錯),但是不知道到底是哪段ABAP代碼出錯了。
1、定位到那條數據
2、創建斷點
后台JOB斷點
進入SM37 查找到自己想要debug的后台程序,這里運行完畢或者正在運行的均可進入debug 查找到后打中job前面的勾 然后在控制框輸入JDBG回車,即進入debug
下面通過一個簡單的例子,來介紹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中找不到就會報錯。。。