美文网首页
实现 ABAP 条件断点的三种方式分享

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

作者: 华山令狐冲 | 来源:发表于2022-07-08 10:09 被阅读0次

所谓条件断点,就是设置在某行语句上的断点,并不总是会触发,而是仅当满足一定条件时才触发。

条件断点的使用场合是什么?

举个简单的例子,下图第15行ADD语句设置一个断点。因为它在一个具有1000行的内表循环体内,所以正常情况下会触发1000次。

假设我们在调试一个bug,这个bug当循环到第999次时才出现,那我们前998次的单步调试都是无效的。最高效的做法,就是借助条件断点的概念,让断点在代码执行到第999次循环时,触发且仅触发一次。

本文介绍实现ABAP条件断点的三种方式。也欢迎大家分享自己最喜欢用的且本文尚未提到的条件断点技术。

方法一:给ABAP断点维护触发条件

在ABAP调试器里点击Break/Watchpoints面板,新建一个断点:

在Free Condition Entry里维护这个断点的触发条件。

回到我上面的例子,我的内表里包含了从1递增到1000的整数,总共1000条记录,而我的触发条件维护为<data> = 22. 显然,这个断点在第22次循环时,唯一触发一次。

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

按F8继续调试,断点有且仅触发了一次,此时<data>的值为22,正好符合我们维护的触发条件,成功。

方法二:利用ABAP调试器里的观察点(Watchpoint)

打开 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执行脚本:

断点再次如期触发.

这个 script 的源代码如下:

我们知道,像如图一这种类的静态属性,因为不属于类的实例所有,因此调试到这个类的方法内部时,只能通过图二演示的两种方式在调试器显示该属性的值。而一旦调试到该类方法的外部,通常就只能通过"类名=>属性名"的方式来显示静态属性值(图三)。其实还有一种方式,如图四和图五所示。

图一:ABAP类的静态属性

图二:如何在ABAP调试器里查看类的静态属性

图三:在调试器里跳出类的方法之后,如何查看静态属性



图四和图五在调试器的Objects面板里,手动输入{C:ZCL_STATIC}, 这里的ZCL_STATIC替换成其他包含有静态属性的类名,回车即可查看。

可能有些朋友觉得这个小技巧没啥用吧,我以前在调试很多用单例模式(Singleton)实现的框架代码时经常用。当排错需要查看一个用单例模式实现的类的多个静态属性时,如果用图三介绍的"类名=>属性名"的方式,要重复敲很多字符,敲击键盘的时间复杂度为o(n), n为静态属性的个数。用Object面板这种技巧,敲击键盘的时间复杂度一下子降到o(1), 提高了排错效率。

总结

所谓条件断点,就是设置在某行语句上的断点,并不总是会触发,而是仅当满足一定条件时才触发。本文首先介绍了 ABAP 条件断点的使用场合,接着使用了一个包含循环的 ABAP 程序,分享了三种不同的条件断点的使用方式。灵活运用条件断点,能大大提高开发人员的调试效率。

相关文章

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

    所谓条件断点,就是设置在某行语句上的断点,并不总是会触发,而是仅当满足一定条件时才触发。 条件断点的使用场合是什么...

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

    本文是鼠年第3篇文章,也是汪子熙公众号第202篇原创文章。 今天是大年初三,Jerry祝大家霍去病,辛弃疾,健健康...

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

    背景 有不同的同事问我这个问题:例如下图的LOOP要执行1000次,我只对其中的某一次比如第501次循环感兴趣,我...

  • 1.对象原理探究

    alloc 探索 alloc 已经创建了对象 init alloc 实现 原理 源码实现 介绍三种方式 1、下断点...

  • SAP ABAP CDS view Association 引入

    ABAP CDS view 支持三种 join 方式: Inner Join Left Outer join Ri...

  • 3.常见的断点

    常用的断点包括:INT3断点、硬件断点、内存断点、消息断点、条件断点等。 1.条件断点的设置和应用 什么是条件断点...

  • iOS之实现大文件下载存储的操作方式

    前言 最近在整理梳理断点续传的功能,查看了许多关于大文件存储实现的方式。梳理一下它们的特点。 实现文件存储的三种方...

  • iOS开发调试概述

    1.断点 普通断点全局断点条件断点 条件断点中的Add Symbolic BreakPoint为某一方法加断点,可...

  • iOS-底层探索三种方式

    底层探索三种方式 1.下断点 按住 control + step into2.符号断点跟踪代码流程3.汇编跟踪代码...

  • OC-底层原理01:探索源码三种方式

    本文主要介绍探索源码三种方式 1、打断点通过按住control+step into 2、下符号断点直接跟流程 3、...

网友评论

      本文标题:实现 ABAP 条件断点的三种方式分享

      本文链接:https://www.haomeiwen.com/subject/qmnmbrtx.html