ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实现ABAP条件断点的三种方式

2020-01-30 16:05:03  阅读:244  来源: 互联网

标签:触发 22 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条记录,而我的触发条件维护为 = 22. 显然,这个断点在第22次循环时,唯一触发一次。

维护完毕后,我们在断点面板里看到了这个新建的断点:

按F8继续调试,断点有且仅触发了一次,此时的值为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 的值,存储在临时变量lv_result里。如果该变量的值为22,就调用ABAP脚本的工具方法break,触发断点。

把这段脚本通过上图的Save As按钮另存下来,取名ZJERRY_TEST.

然后重新执行我们的测试代码, 使用Load Script加载刚才保存的ABAP脚本:

点击Start Script执行脚本:

断点再次如期触发.

希望大家能灵活运用这三种ABAP条件断点的实现方式, 将它们融会贯通。《风云》中的雄霸, 将天霜拳,排云掌和风神腿融为一体, 自创了三分归元气这项神技。Jerry也祝愿大家早日炼成属于自己开发领域的三分归元气。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

标签:触发,22,ABAP,三种,条件,断点,调试器
来源: https://www.cnblogs.com/sap-jerry/p/12242950.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有