實現ABAP條件斷點的三種方式
本文是鼠年第3篇文章,也是汪子熙公眾號第202篇原創文章。
今天是大年初三,Jerry祝大家霍去病,辛棄疾,健健康康,長命百歲。
ABAP條件斷點這個話題,Jerry的同事曾經問過我,雖然小但很實用。
所謂條件斷點,就是設定在某行語句上的斷點,並不總是會觸發,而是僅當滿足一定條件時才觸發。
條件斷點的使用場合是什麼?
舉個簡單的例子,下圖第15行ADD語句設定一個斷點。因為它在一個具有1000行的內表迴圈體內,所以正常情況下會觸發1000次。
假設我們在除錯一個bug,這個bug當迴圈到第999次時才出現,那我們前998次的單步除錯都是無效的。最高效的做法,就是藉助條件斷點的概念,讓斷點在程式碼執行到第999次迴圈時,觸發且僅觸發一次。
本文介紹實現ABAP條件斷點的三種方式。也歡迎大家分享自己最喜歡用的且本文尚未提到的條件斷點技術。
為了方便記憶,Jerry用天下會雄霸幫主的三種絕技來給這三種條件斷點的實現方式命名。
方法一
天霜拳 - 給ABAP斷點維護觸發條件
天霜拳,冰系技能,雄霸傳予大弟子秦霜。
天霜拳在馬榮成的《風雲》漫畫裡一共出現了14式:
- 風霜撲面
- 霜寒抱月
- 霜結中霄
- 霜雪紛飛
- 霜冷長河
- 霜痕累累
- 霜凝見拙
- 披霜撥露
- 霜雪冰山
- 傲雪凌霜:這是天霜拳的絕招,也是最為強勁的一招。一招四式(傲立孤峰、雪嶺尋梅、凌雲壓頂、霜河倒影),寒氣瀰漫,四下五丈之內都被凍成冰霜。
大師兄啊,在《風雲》裡是個杯具人物,唉。
在ABAP偵錯程式裡點選Break/Watchpoints皮膚,新建一個斷點:
在Free Condition Entry裡維護這個斷點的觸發條件。
回到我上面的例子,我的內表裡包含了從1到1000的整數,總共1000條記錄,而我的觸發條件維護為<data> = 22. 顯然,這個斷點在第22次迴圈時,唯一觸發一次。
維護完畢後,我們在斷點皮膚裡看到了這個新建的斷點:
按F8繼續除錯,斷點有且僅觸發了一次,此時<data>的值為22,正好符合我們維護的觸發條件,成功。
方法二
排雲掌 - 利用ABAP偵錯程式裡的觀察點(Watchpoint)
小的時候看漫畫,覺得不哭死神步驚雲簡直是一個bug般的存在,會的技能之多令人髮指。
僅《風雲》第一部裡,步驚雲就掌握了霍家劍法,悲痛莫名,排雲掌,聖靈劍法,麒麟臂,三霸劍等等。Jerry個人認為塑造得最成功出彩的,還要算那十二式變化莫測,名稱飄逸的排雲掌:
- 行雲流水
- 披雲戴月
- 翻雲覆雨
- 排雲倒海
- 烏雲蔽日
- 重雲深鎖
- 撕天排雲
- 雲海波濤
- 燮雲無定
- 殃雲天降
- 愁雲慘淡
ABAP的偵錯程式,也和步驚雲的排雲掌一樣,使用方式變化多端。
此處建立Watchpoint:
我們知道在LOOP迴圈體內,系統變數sy-tabix會自動賦以當前的迴圈次數。因此我們在Watchpoint的觸發條件裡,維護成sy-tabix = 22, 也可以達到在第22次迴圈時觸發的目的。
Watchpoint建立好之後顯示如下:
按F8繼續除錯,程式果然在第22次迴圈時觸發了:
並且偵錯程式裡彈出一條提示資訊:Watchpoint reached
方法三
風神腿 - ABAP Debugger Script
天下武功,唯快不破。
擁有一頭飄逸長髮的聶風,施展起六式風神腿來,如暴風驟雨,摧枯拉朽, 真可配得上“風中之神”的稱號。
- 捕風捉影
- 風中勁草
- 暴雨狂風
- 雷厲風行
- 風捲樓殘
- 神風怒嚎
ABAP Debugger Script這項技術,在SAP研究院內部用的很廣泛。
回到上面的例子,我們將編寫一段簡單的ABAP程式碼,去控制目標ABAP程式碼的斷點觸發。
在ABAP偵錯程式裡,點選Script標籤頁,建立一個新的ABAP指令碼:
我們想用ABAP指令碼監控ABAP程式碼裡某個簡單變數的值變化,所以使用指令碼建立嚮導裡的Variable Value(for Simple Variables):
這個嚮導會自動幫我們生成ABAP指令碼,其實也就是一段ABAP程式碼了,這段程式碼可以用程式設計的方式,在偵錯程式啟用的上下文裡,獲取某個ABAP變數的值。
下圖指令碼的語義很清晰,獲取偵錯程式裡field symbol <data>的值,儲存在臨時變數lv_result裡。如果該變數的值為22,就呼叫ABAP指令碼的工具方法break,觸發斷點。
把這段指令碼透過上圖的Save As按鈕另存下來,取名ZJERRY_TEST.
然後重新執行我們的測試程式碼, 使用Load Script載入剛才儲存的ABAP指令碼:
點選Start Script執行指令碼:
斷點再次如期觸發.
希望大家能靈活運用這三種ABAP條件斷點的實現方式, 將它們融會貫通。《風雲》中的雄霸, 將天霜拳,排雲掌和風神腿融為一體, 自創了三分歸元氣這項神技。Jerry也祝願大家早日煉成屬於自己開發領域的三分歸元氣。
更多閱讀
- Jerry的ABAP, Java和JavaScript亂燉
- ABAP開發人員未來應該學些什麼
- Jerry 2017年的五一小長假: 8種經典排序演算法的ABAP實現
- Jerry的ABAP原創技術文章合集
- 300行ABAP程式碼實現一個最簡單的區塊鏈原型
- 使用Java+SAP雲平臺+SAP Cloud Connector呼叫ABAP On-Premise系統裡的函式
- 在SAP雲平臺的CloudFoundry環境下消費ABAP On-Premise OData服務
- ABAP vs Java, 蛙泳 vs 自由泳
- 聊聊C語言和ABAP
- 動手使用ABAP Channel開發一些小工具,提升日常工作效率
- 我用ABAP做過的那些無聊的事情
- 不喜歡SAP GUI? 那試試用Eclipse進行ABAP開發吧
- 使用Visual Studio Code編寫和啟用ABAP程式碼
- 你的ABAP程式給佛祖開過光麼? 來試試Jerry這個小技巧
- 在SAP雲平臺ABAP程式設計環境上編寫第一段ABAP程式
- SAP官方釋出的ABAP程式設計規範
- ABAP Code Inspector那些隱藏的功能,您都知道嗎?
- 還在用ABAP進行SAP產品的二次開發?來了解下這種全新的二次開發理念吧
- ABAP Netweaver體內的那些寄生式程式語言
- 從SAP社群上的一篇部落格開始,聊聊SAP產品命名背後的那份情懷
- 雲端的ABAP Restful服務開發
- 如何在SAP雲平臺ABAP程式設計環境裡把CDS view暴露成OData服務
- 使用abapGit在ABAP On-Premises系統和SAP雲平臺ABAP環境之間進行程式碼傳輸
- 30分鐘用Restful ABAP Programming模型開發一個支援增刪改查的Fiori應用
- Jerry帶您瞭解Restful ABAP Programming模型系列之二:Action和Validation的實現
- Jerry帶您瞭解Restful ABAP Programming模型系列之三: 雲端ABAP應用除錯
- SAP雲平臺上的ABAP程式設計環境裡如何消費第三方服務
- ABAP開發者上雲的時候到了 - 現在大家可以免費使用SAP雲平臺ABAP環境的試用版了
- 學而不思則罔 - SAP雲平臺ABAP程式設計環境的由來和適用場景
- SAP雲平臺裡的三叉戟應用
- 如何基於Restful ABAP Programming模型開發並部署一個支援增刪改查的Fiori應用
- SAP 2019 TechEd Key Note解讀:雲時代下SAP從業人員如何做二次開發?
- 有哪些ABAP關鍵字和語法,到了ABAP雲環境上就沒辦法用了?
- ABAP開發環境終於支援以駝峰命名法自動格式化ABAP變數名了
- 利用ABAP 740的新關鍵字REDUCE完成一個實際工作任務
- 一段讓人瑟瑟發抖的ABAP程式碼
- 昨日萬聖節ABAP怪獸級程式碼謎團,公佈答案啦
- 介紹一種在ABAP核心態進行內表高效複製的方法
- 使用SAP Cloud Application Programming模型開發OData的一個實際例子
- 當ABAP遇見普羅米修斯
- 使用ABAP繪製可伸縮向量圖
- ABAP開發環境語法高亮的那些事兒
- SAP錯誤訊息除錯之七種武器: 讓所有的錯誤訊息都能被定位
- 使用ABAP操作Excel的幾種方法
- SAP GUI裡的收藏夾事務碼管理工具
- SAP GUI和Windows登錄檔
- 有了Debug許可權就能幹壞事?小心了,你的一舉一動盡在系統監控中
- ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX這些東東是什麼鬼
- 實現ABAP條件斷點的三種方式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2674516/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實現 ABAP 條件斷點的三種方式分享斷點
- React 提供了幾種方式來實現條件渲染React
- 單點登入的三種實現方式
- [譯] React 實現條件渲染的多種方式和效能考量React
- 除錯——條件斷點除錯斷點
- springAOP的三種實現方式Spring
- IDEA小技巧:Debug條件斷點Idea斷點
- lua版promise實現3 - 條件判斷例子Promise
- js實現繼承的三種方式JS繼承
- 報表查詢條件的 N 種使用方式
- 矩陣爆破逆向之條件斷點的妙用矩陣斷點
- 兩種方式實現橫向滾動條
- python 三種方式實現截圖Python
- Go定時器的三種實現方式Go定時器
- Java中Singleton的三種實現方式解析Java
- 實現圖片染色效果的三種方式
- 透過互斥鎖+條件量的方式實現同步與互斥
- 面試官:來說說單點登入的三種實現方式面試
- Java中Elasticsearch 實現分頁方式(三種方式)JavaElasticsearch
- 郵件介面推送的三種狀態方式
- IDEA如何給debug斷點加上篩選條件判斷Idea斷點
- PHP 三種方式實現鏈式操作PHP
- Java實現多執行緒的三種方式Java執行緒
- 實現布隆過濾器的三種方式過濾器
- 前端實現文字跑馬燈的三種方式前端
- 三欄式佈局的幾種實現方式
- 實現圖片懶載入的三種方式
- vue實現單點登入的N種方式Vue
- Java中的條件判斷語句-動力節點Java
- 潤乾報表中進度條的一種實現方式
- python兩種簡潔的條件判斷語句寫法Python
- Autofac實現有條件的DI
- 使用Vue實現圖片上傳的三種方式Vue
- Javascript 中實現物件原型繼承的三種方式JavaScript物件原型繼承
- 直播系統原始碼,vue二種方式根據條件判斷顯示不同樣式原始碼Vue
- 漫畫:在Java中使用條件匹配四種方式!Java
- 【SHELL】Shell中的條件判斷
- 變數轉化為判斷條件時的各種情況變數