中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實現ABAP條件斷點的三種方式分別是什么

發布時間:2021-11-24 17:22:53 來源:億速云 閱讀:169 作者:柒染 欄目:互聯網科技

這篇文章給大家介紹實現ABAP條件斷點的三種方式分別是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

ABAP條件斷點這個話題,Jerry的同事曾經問過我,雖然小但很實用。

所謂條件斷點,就是設置在某行語句上的斷點,并不總是會觸發,而是僅當滿足一定條件時才觸發。

條件斷點的使用場合是什么?

舉個簡單的例子,下圖第15行ADD語句設置一個斷點。因為它在一個具有1000行的內表循環體內,所以正常情況下會觸發1000次。

實現ABAP條件斷點的三種方式分別是什么

假設我們在調試一個bug,這個bug當循環到第999次時才出現,那我們前998次的單步調試都是無效的。最高效的做法,就是借助條件斷點的概念,讓斷點在代碼執行到第999次循環時,觸發且僅觸發一次。

小編介紹實現ABAP條件斷點的三種方式。


方法一

給ABAP斷點維護觸發條件

在ABAP調試器里點擊Break/Watchpoints面板,新建一個斷點:

實現ABAP條件斷點的三種方式分別是什么

在Free Condition Entry里維護這個斷點的觸發條件。

回到我上面的例子,我的內表里包含了從1到1000的整數,總共1000條記錄,而我的觸發條件維護為<data> = 22. 顯然,這個斷點在第22次循環時,唯一觸發一次。

實現ABAP條件斷點的三種方式分別是什么

維護完畢后,我們在斷點面板里看到了這個新建的斷點:

實現ABAP條件斷點的三種方式分別是什么

按F8繼續調試,斷點有且僅觸發了一次,此時<data>的值為22,正好符合我們維護的觸發條件,成功。

實現ABAP條件斷點的三種方式分別是什么

方法二

利用ABAP調試器里的觀察點(Watchpoint)


ABAP的調試器,使用方式變化多端。

此處創建Watchpoint:

實現ABAP條件斷點的三種方式分別是什么

我們知道在LOOP循環體內,系統變量sy-tabix會自動賦以當前的循環次數。因此我們在Watchpoint的觸發條件里,維護成sy-tabix = 22, 也可以達到在第22次循環時觸發的目的。

實現ABAP條件斷點的三種方式分別是什么

Watchpoint創建好之后顯示如下:

實現ABAP條件斷點的三種方式分別是什么

按F8繼續調試,程序果然在第22次循環時觸發了:

實現ABAP條件斷點的三種方式分別是什么

并且調試器里彈出一條提示信息:Watchpoint reached

實現ABAP條件斷點的三種方式分別是什么

方法三

ABAP Debugger Script

ABAP Debugger Script這項技術,在SAP研究院內部用的很廣泛。

回到上面的例子,我們將編寫一段簡單的ABAP代碼,去控制目標ABAP代碼的斷點觸發。

在ABAP調試器里,點擊Script標簽頁,創建一個新的ABAP腳本:

實現ABAP條件斷點的三種方式分別是什么

我們想用ABAP腳本監控ABAP代碼里某個簡單變量的值變化,所以使用腳本創建向導里的Variable Value(for Simple Variables):

實現ABAP條件斷點的三種方式分別是什么

這個向導會自動幫我們生成ABAP腳本,其實也就是一段ABAP代碼了,這段代碼可以用編程的方式,在調試器激活的上下文里,獲取某個ABAP變量的值。

下圖腳本的語義很清晰,獲取調試器里field symbol <data>的值,存儲在臨時變量lv_result里。如果該變量的值為22,就調用ABAP腳本的工具方法break,觸發斷點。

實現ABAP條件斷點的三種方式分別是什么

把這段腳本通過上圖的Save As按鈕另存下來,取名ZJERRY_TEST.

然后重新執行我們的測試代碼, 使用Load Script加載剛才保存的ABAP腳本:

實現ABAP條件斷點的三種方式分別是什么

點擊Start Script執行腳本:

實現ABAP條件斷點的三種方式分別是什么

斷點再次如期觸發.

實現ABAP條件斷點的三種方式分別是什么

關于實現ABAP條件斷點的三種方式分別是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扬州市| 灵丘县| 瑞丽市| 大方县| 泾阳县| 德江县| 河池市| 诸城市| 错那县| 梅州市| 明水县| 随州市| 德安县| 泗阳县| 墨玉县| 淮安市| 通海县| 汉川市| 文成县| 都昌县| 石渠县| 二连浩特市| 财经| 阳谷县| 丹棱县| 祁阳县| 米林县| 离岛区| 土默特右旗| 唐河县| 邹城市| 修武县| 会昌县| 海淀区| 自治县| 镇康县| 石城县| 定安县| 珲春市| 赞皇县| 屏南县|