Jerry帶您瞭解Restful ABAP Programming模型系列之三:雲端ABAP應用除錯
Jerry的Restful ABAP Programming模型介紹系列的前兩篇文章:
- 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用
- Jerry帶您瞭解Restful ABAP Programming模型系列之二:Action和Validation的實現
今天我們們來聊聊SAP雲平臺ABAP環境上的除錯問題。
Jerry在SAP社群上寫了600多篇部落格,閱讀量最高的大概要算下面這篇寫於2013年的文章: Six kinds of debugging tips to find the source code where the message is raised
其實實際閱讀量遠大於14萬,因為2016年SAP社群改版,之前的閱讀量清零了。
這個數字也說明廣大SAP開發者們對程式碼除錯這個話題的重視程度。
Jerry之前在SAP Cloud Platform上進行nodejs和Java開發的時候,對執行在雲上的用這兩門語言開發的應用的單步除錯很頭痛。儘管仍然可以透過Jerry這篇文章 如何提高後臺服務應用問題的排查效率?日誌 VS 遠端除錯 裡介紹的埠對映方式實現在本地電腦上除錯雲端應用的功能,但Jerry還是懷念On-Premises ABAP裡面那種單步除錯的便捷性——滑鼠輕輕一點,斷點即設定好,無需任何配置,立即就能進行單步除錯。
那麼現在ABAP到了雲端後,其單步除錯還和之前的On-Premises環境裡一樣易於使用麼?答案是肯定的。
我們們就拿一個具體例子來體驗。
Jerry透過Restful ABAP Programming系列的前兩篇,已經開發出了一個支援增刪改查,支援自定義資料校驗和Action的Fiori應用。
我選中ID為103這條記錄,點選Accept Travel按鈕後,期望透過該Action將其狀態設定為Accepted:
不幸的是,我沒能看到期望中的狀態變化,而是下面這個所有ABAP程式設計人員都不願意看見的ABAP執行時錯誤提示介面。
不過,大家注意到了上圖右下角的Debug超連結麼?和SAPGUI一樣,點選之後立即就能開啟偵錯程式,能夠觀察發生這個執行時錯誤的呼叫棧,引起錯誤的詳細程式碼位置和相關變數的值。
順便提一句,如果您想自定義在SAP GUI裡出現的ABAP執行時錯誤顯示(就是在On-Premises環境下ST22事務碼裡看到的內容),比如新增一段"佛祖保佑,永無BUG",那麼可以參考Jerry這篇文章:
回到ABAP Development Tool裡,我們先點選Show超連結,就可以看到執行時錯誤明細:Short Text告訴我們,我們點選Accept按鈕後,相關的處理框架有意地丟擲一個CX_CSP_ACT_RESPONSE的異常。丟擲異常的位置是在程式CL_CSP_ACT_CHECK_FEATS_ACTIONS裡,這暗示我們,這個錯可能和Action執行前的檢查(CHECK)有關。
繼續向下滑動滑鼠,發現在框架程式碼內,因為從第353行內表it_feature_result裡沒有讀出任何內容,因此sy-subrc不為0,導致進入第355行的RAISE SHORTDUMP分支。
在SAP Cloud Platform ABAP環境下當前登入使用者發生的所有執行時錯誤,可以在ABAP Development Tool的Feed Reader檢視下檢視,這個功能相當於SAP GUI裡的ST22事務碼。
現在我們關於這個執行時錯誤的靜態資訊瞭解得差不多了,下一步在偵錯程式裡觀察。
重新啟動Fiori應用,再次點選Accept按鈕,出現執行時錯誤後點選Debug超連結,ABAP偵錯程式自動彈出,引起執行時錯誤的那一行程式碼被高亮,同時左邊顯示出呼叫棧。
把滑鼠放在it_feature_result上,發現這個內表是空的,當然無法從裡面讀出資料了。這個內表是當前ABAP類CL_CSP_ACT_CHECK_FEATS_ACTIONS的方法handle_rejected_instances的輸入引數,需要搞清楚為啥這個輸入引數為空。
從丟擲執行時異常的棧幀往外看一幀,就知道這個輸入的內表是透過第291行的execute_feature_controllers生成的,這個方法會透過回撥函式的方式,呼叫我們在Behavior Definition實現的一個get_features方法裡:
這裡我們就找到了引起這個執行時錯誤的根源:因為之前Jerry出於測試目的,註釋了一段程式碼,導致get_features被框架回撥時,沒有返回框架期望的資料:
當Jerry把這段需要的程式碼重新enable然後設定斷點,點選Accept按鈕,透過呼叫棧可以清晰看到框架的execute_feature_controllers是如何呼叫到我們實現的get_features回撥方法的。
希望透過Jerry這個簡單的例子能夠讓大家對SAP Cloud Platform ABAP程式設計環境裡如何進行除錯有一個初步的印象,感謝閱讀。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2659282/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP Restful ABAP Programming 程式設計模型的 Action 實現和雲端除錯介紹REST程式設計模型除錯
- Restful ABAP Programming模型系列二:Action和Validation的實現REST模型
- 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用REST模型
- 如何基於Restful ABAP Programming模型開發並部署一個支援增刪改查的Fiori應用REST模型
- 如何使用 Restful ABAP Programming 程式設計模型開發一個支援增刪改查的 Fiori 應用REST程式設計模型
- ABAP巨集的除錯除錯
- Jerry的ABAP原創技術文章合集
- ABAP工作流(workflow)的除錯方式除錯
- SAP ABAP Programming Tutorials - Free Training CourseAI
- 使用 ABAP 控制 Android 原生應用Android
- 啟明雲端帶你瞭解4.3寸串列埠屏的應用串列埠
- 啟明雲端帶你瞭解2.4寸旋鈕屏的應用
- 啟明雲端帶你瞭解2.1寸串列埠屏的應用串列埠
- 使用 Prometheus 監控 SAP ABAP 應用程式Prometheus
- 瞭解 RESTfulREST
- 帶您瞭解mysql CONCAT()函式MySql函式
- SAP掃盲系列之二:SAP ABAP應用伺服器的組成部分伺服器
- 如何使用ABAP非同步RFC呼叫提升應用效能非同步
- ABAP面試題系列:寫一組會出現死鎖(Deadlock)的ABAP程式面試題
- 帶您探究雲端儲存的奧祕,三分鐘幫您快速瞭解OSS
- 如何開啟 ABAP Update function module 和系統程式的除錯功能Function除錯
- 如何使用ABAP Restful API進行程式碼的全文搜尋RESTAPI行程
- 你的ABAP程式給佛祖開過光麼?來試試Jerry這個小技巧
- 你應該瞭解的 5 個 JavaScript 除錯技巧JavaScript除錯
- 帶您瞭解TRIZ理論解決問題的流程
- ABAP Code Inspector那些隱藏的功能,您都知道嗎?
- 雲端的 ABAP Restful 服務開發以及通過 abapGit 傳輸到其他系統的詳細步驟RESTGit
- SAP ABAP 平臺新的程式設計模型程式設計模型
- SAP ABAP Netweaver 裡的 ABAP 會話概念會話
- escape in ABAP and JavaScriptJavaScript
- JavaScript and Ruby in ABAPJavaScript
- ABAP的事件事件
- ABAP程式示例
- ABAP字串操作字串
- ABAP Interview QuestionsView
- 【ABAP】FTP ProgramFTP
- SAP ABAP CDS view裡的註解在ABAP後臺是如何被解析的?View
- 利用ABAP除錯模式修改SE16裡資料庫表的內容除錯模式資料庫