Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
Jerry的Restful ABAP Programming模型介紹系列的前兩篇文章:
- 30分鐘用Restful ABAP Programming模型開(kāi)發(fā)一個(gè)支持增刪改查的Fiori應(yīng)用
- Jerry帶您了解Restful ABAP Programming模型系列之二:Action和Validation的實(shí)現(xiàn)
今天咱們來(lái)聊聊SAP云平臺(tái)ABAP環(huán)境上的調(diào)試問(wèn)題。
Jerry在SAP社區(qū)上寫(xiě)了600多篇博客,閱讀量最高的大概要算下面這篇寫(xiě)于2013年的文章:Six kinds of debugging tips to find the source code where the message is raised
其實(shí)實(shí)際閱讀量遠(yuǎn)大于14萬(wàn),因?yàn)?016年SAP社區(qū)改版,之前的閱讀量清零了。
這個(gè)數(shù)字也說(shuō)明廣大SAP開(kāi)發(fā)者們對(duì)代碼調(diào)試這個(gè)話(huà)題的重視程度。
Jerry之前在SAP Cloud Platform上進(jìn)行nodejs和Java開(kāi)發(fā)的時(shí)候,對(duì)運(yùn)行在云上的用這兩門(mén)語(yǔ)言開(kāi)發(fā)的應(yīng)用的單步調(diào)試很頭痛。盡管仍然可以通過(guò)Jerry這篇文章 如何提高后臺(tái)服務(wù)應(yīng)用問(wèn)題的排查效率?日志 VS 遠(yuǎn)程調(diào)試 里介紹的端口映射方式實(shí)現(xiàn)在本地電腦上調(diào)試云端應(yīng)用的功能,但Jerry還是懷念On-Premises ABAP里面那種單步調(diào)試的便捷性——鼠標(biāo)輕輕一點(diǎn),斷點(diǎn)即設(shè)置好,無(wú)需任何配置,立即就能進(jìn)行單步調(diào)試。
那么現(xiàn)在ABAP到了云端后,其單步調(diào)試還和之前的On-Premises環(huán)境里一樣易于使用么?答案是肯定的。
咱們就拿一個(gè)具體例子來(lái)體驗(yàn)。
Jerry通過(guò)Restful ABAP Programming系列的前兩篇,已經(jīng)開(kāi)發(fā)出了一個(gè)支持增刪改查,支持自定義數(shù)據(jù)校驗(yàn)和Action的Fiori應(yīng)用。
我選中ID為103這條記錄,點(diǎn)擊Accept Travel按鈕后,期望通過(guò)該Action將其狀態(tài)設(shè)置為Accepted:
不幸的是,我沒(méi)能看到期望中的狀態(tài)變化,而是下面這個(gè)所有ABAP編程人員都不愿意看見(jiàn)的ABAP運(yùn)行時(shí)錯(cuò)誤提示界面。
不過(guò),大家注意到了上圖右下角的Debug超鏈接么?和SAPGUI一樣,點(diǎn)擊之后立即就能打開(kāi)調(diào)試器,能夠觀察發(fā)生這個(gè)運(yùn)行時(shí)錯(cuò)誤的調(diào)用棧,引起錯(cuò)誤的詳細(xì)代碼位置和相關(guān)變量的值。
順便提一句,如果您想自定義在SAP GUI里出現(xiàn)的ABAP運(yùn)行時(shí)錯(cuò)誤顯示(就是在On-Premises環(huán)境下ST22事務(wù)碼里看到的內(nèi)容),比如添加一段"佛祖保佑,永無(wú)BUG",那么可以參考Jerry這篇文章:
你的ABAP程序給佛祖開(kāi)過(guò)光么?來(lái)試試Jerry這個(gè)小技巧
回到ABAP Development Tool里,我們先點(diǎn)擊Show超鏈接,就可以看到運(yùn)行時(shí)錯(cuò)誤明細(xì):Short Text告訴我們,我們點(diǎn)擊Accept按鈕后,相關(guān)的處理框架有意地拋出一個(gè)CX_CSP_ACT_RESPONSE的異常。拋出異常的位置是在程序CL_CSP_ACT_CHECK_FEATS_ACTIONS里,這暗示我們,這個(gè)錯(cuò)可能和Action執(zhí)行前的檢查(CHECK)有關(guān)。
繼續(xù)向下滑動(dòng)鼠標(biāo),發(fā)現(xiàn)在框架代碼內(nèi),因?yàn)閺牡?53行內(nèi)表it_feature_result里沒(méi)有讀出任何內(nèi)容,因此sy-subrc不為0,導(dǎo)致進(jìn)入第355行的RAISE SHORTDUMP分支。
在SAP Cloud Platform ABAP環(huán)境下當(dāng)前登錄用戶(hù)發(fā)生的所有運(yùn)行時(shí)錯(cuò)誤,可以在ABAP Development Tool的Feed Reader視圖下查看,這個(gè)功能相當(dāng)于SAP GUI里的ST22事務(wù)碼。
現(xiàn)在我們關(guān)于這個(gè)運(yùn)行時(shí)錯(cuò)誤的靜態(tài)信息了解得差不多了,下一步在調(diào)試器里觀察。
重新啟動(dòng)Fiori應(yīng)用,再次點(diǎn)擊Accept按鈕,出現(xiàn)運(yùn)行時(shí)錯(cuò)誤后點(diǎn)擊Debug超鏈接,ABAP調(diào)試器自動(dòng)彈出,引起運(yùn)行時(shí)錯(cuò)誤的那一行代碼被高亮,同時(shí)左邊顯示出調(diào)用棧。
把鼠標(biāo)放在it_feature_result上,發(fā)現(xiàn)這個(gè)內(nèi)表是空的,當(dāng)然無(wú)法從里面讀出數(shù)據(jù)了。這個(gè)內(nèi)表是當(dāng)前ABAP類(lèi)CL_CSP_ACT_CHECK_FEATS_ACTIONS的方法handle_rejected_instances的輸入?yún)?shù),需要搞清楚為啥這個(gè)輸入?yún)?shù)為空。
從拋出運(yùn)行時(shí)異常的棧幀往外看一幀,就知道這個(gè)輸入的內(nèi)表是通過(guò)第291行的execute_feature_controllers生成的,這個(gè)方法會(huì)通過(guò)回調(diào)函數(shù)的方式,調(diào)用我們?cè)贐ehavior Definition實(shí)現(xiàn)的一個(gè)get_features方法里:
這里我們就找到了引起這個(gè)運(yùn)行時(shí)錯(cuò)誤的根源:因?yàn)橹癑erry出于測(cè)試目的,注釋了一段代碼,導(dǎo)致get_features被框架回調(diào)時(shí),沒(méi)有返回框架期望的數(shù)據(jù):
當(dāng)Jerry把這段需要的代碼重新enable然后設(shè)置斷點(diǎn),點(diǎn)擊Accept按鈕,通過(guò)調(diào)用棧可以清晰看到框架的execute_feature_controllers是如何調(diào)用到我們實(shí)現(xiàn)的get_features回調(diào)方法的。
希望通過(guò)Jerry這個(gè)簡(jiǎn)單的例子能夠讓大家對(duì)SAP Cloud Platform ABAP編程環(huán)境里如何進(jìn)行調(diào)試有一個(gè)初步的印象,感謝閱讀。
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 统计学_Wilcoxon signed-
- 下一篇: 特斯拉一季度财报发布:营收233.29亿