本文是鼠年第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条件断点的三种方式

已触发了一个断点 vs_实现ABAP条件断点的三种方式相关推荐

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

    本文是鼠年第3篇文章,也是汪子熙公众号第202篇原创文章. 今天是大年初三,Jerry祝大家霍去病,辛弃疾,健健康康,长命百岁. ABAP条件断点这个话题,Jerry的同事曾经问过我,虽然小但很实用. ...

  2. 关于程序运行中出现的bug“Project1.exe 已触发了一个断点”和“ntdll.dll处引发的异常”和“指针对象为0xdddddddd”

    最近自己做了一个数组+链表的结构.在写完后频频出现 "Project1.exe 已触发了一个断点"和"ntdll.dll处引发的异常"和"指针对象为0 ...

  3. vs提示出现“xxx.exe中已触发了一个断点”错误的解决办法

    当vs在运行代码结束后出现"xxx.exe中已触发了一个断点"这样的报错后,最主要的原因应该是内存管理出现了问题,野指针.溢出等等. 在今天的代码调试中就出现了这样的问题 并且伴随 ...

  4. 一个服务器同时运行多个网站三种方式

    一个服务器同时运行多个网站三种方式有三种方式:1.IP一样,端口不一样 2.端口一样IP不一样 3.端口一样,IP一样,绑定的域名不一样 第一种最简单,只需要在新建网站的时候修改端口,一般改为8080 ...

  5. Python(2)-第一个python程序、执行python程序三种方式

    第一个Python 程序 1. 第一个Python 程序 2. 常用两Python个版本 3. 程序执行的三种方式 3.1 解释器 3.2 交互式运行Python程序 3.3 IDE(集成开发环境)- ...

  6. 已触发了一个断点 vs_VSCode源码分析-断点调试

    背景 今年年初,有幸参与了阿里集团IDE 共建项目组,打造阿里生态体系内的公共IDE底层,而作为一款面向开发者的IDE,调试能力的支持一定程度上决定着一款IDE的开发体验:VSCode作为微软体系下一 ...

  7. 图.exe 已触发了一个断点。 出现了_学术简报︱基于保护综合重要度的最小断点集优选方法...

    云南电力调度控制中心的研究人员蒋红亮,在2019年第10期<电气技术>杂志上撰文,为实现复杂环网整定配合起始点的合理选择,提出了一种基于保护综合重要度的最小断点集优选方法. 首先,定义了反 ...

  8. 在ABAP里实现条件断点的三种方式

    背景 有不同的同事问我这个问题:例如下图的LOOP要执行1000次,我只对其中的某一次比如第501次循环感兴趣,我肯定不可能按500次F5然后进入第501次的调试.或者我只对LOOP里某个变量为某一个 ...

  9. Windows已在“xxx.exe”中触发了一个断点。

    template<class Type> Type ** Get2Array(int n, int m) {Type **s = (Type**)malloc(sizeof(Type)*n ...

最新文章

  1. 实战:使用Mask-RCNN的停车位检测
  2. 大脑天天超负荷,三分天赋,七分练,世间惊现普通脑修炼秘籍
  3. 人脸识别软件正在学习识别熊脸和牛脸
  4. I-string_2019牛客暑期多校训练营(第四场)
  5. C++11之thread线程
  6. C语言实现升序优先队列Ascending priority queue(附完整源码)
  7. 浏览器中的XML与JavaScript
  8. MFC-CString与int互相转化
  9. 操作系统基础:进程知识笔记(三)
  10. .NET 类型(Types)的那些事
  11. ionic4 集成极光推送jpush
  12. 精简linux (二)背景图片的设置 网络功能的实现
  13. Linux-文件目录命令
  14. model.load_state_dict(checkpoint[‘state_dict‘]) KeyError: ‘state_dict‘
  15. windows 2003 iis php,windows 2003 iis安装php 5.2版本步骤
  16. geo差异表达分析_GEO2R差异表达分析软件
  17. python接入excel_Excel 借助 Python 连接 WorkBench,实现 Excel 输入参数返回结果
  18. Windos环境下kafka配置启动Zookeeper时,报错:Invalid config, exiting abnormally.
  19. minMaxLoc用法
  20. 网狐6603服务器文档,网狐6603服务器配置

热门文章

  1. linux audio(alsa)驱动注册的简明流程.
  2. smartconfig配置模式
  3. Binder框架在Framework层的C++中的使用
  4. springboot之设置mybatis打印sql输出
  5. 深度学习自学(三十九):SRN骨架检测 Side-output Residual Network for Object Symmetry Detection in the Wild
  6. educoder MongoDB 文档的高级查询操作
  7. mysql s x锁_mysql 的S 锁和X锁的区别
  8. python是开源的.它可以被移植_python是开源的,它可以被移植到许多平台上,是对的吗?...
  9. linux 查看网站目录权限,解决SELinux对网站目录权限控制的不当的问题
  10. ft2232驱动安装方法_win7系统无法安装打印机驱动程序的解决方法