本文是鼠年第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条件断点的三种方式
相关推荐
abap外部断点设置 abap 外部断点设置外部断点设置
ABAP基础,ABAP入门,最好的ABAP教材,ABAP三月通
PI IDOC & RFC & ABAP Proxy三种适配器方案对比,关于PI的3种不同方案的对比,还是比较清晰不错的。
ABAP三月通
SAP二次开发语言ABAP使用ALV的显示报表开发程序的详细参数介绍。
SAP ABAP DEBUG 方式总结 一、一般Debug 1、内、外部断点。外部断点功能涵盖了内部断点 2、图上方红框为一次为F5\F6\F7\F8 3、在Debug 进入内表时,可以通过右侧的工具按钮来对内表内容的增删改。 4、若DEBUG想返回...
ABAP资料ABAP资料ABAP资料ABAP资料ABAP资料
ABAP 调用ABAP PROXY
abap tips abap tips abap tips abap tips abap tips
ABAP_实现F4帮助联动 该文档中的代码可以实现F4搜索帮助的联动效果
sap 开发 abap 用于找表的18种方法,大家注意收藏哦
就是SAP 的ABAP语言调用 DLL文件中的函数实现一些功能, 例如可以用DLL文件连接外部数据库读取数据. 我在网上找了好久,都没有一个完整的答案, 也没有一个完整的实例, 根据网上的各种说法, 我整合到一起, 终于成功, ...
ABAP - Keyword Documentation This documentation describes the syntax and meaning of the keywords of the ABAP language and its object-oriented part ABAP Objects. Alongside this, language frameworks ...
sap abap oo实现alv框可编辑
abap逻辑数据库ABAP数据库操作,abap过程中的小积累。用处多多哦
OLE导出: sap中abap 导出excel的方法很多,ole是其中一种,但其导出速度比较慢,一般只应用于对excel格式有特别要求的场所......
我们在用事务码 SE38 创建新程序时,总是被要求指定一个程序类型,这些程序类型分别完成不同的功能,如果选择错误,程序就可能无法运行。下面一一介绍这些程序类型:
abap 函数大全 abap function abap function
abap alv报表实现消消乐小游戏